gpt4 book ai didi

swagger - Springfox 全局响应头

转载 作者:行者123 更新时间:2023-12-02 02:55:01 25 4
gpt4 key购买 nike

在我的 spring boot rest API 中,我为每个端点的每个响应(与方法无关)发回一个唯一的请求 id header “x-request-id”。我可以使用这样的东西添加它:

@ApiResponses(value = { 
@ApiResponse(
code = 200,
message = "Successful status response",
responseHeaders = {
@ResponseHeader(
name = "x-request-id",
description = "auto generated unique request id",
response = String.class)})
})

这很好用,我可以在 Swagger UI 中看到它。但是,对每个端点都这样做是一个繁琐的+维护问题。我希望在全局范围内执行此操作,但 Springfox documentation仅显示使用 .globalResponseMessage 选项的全局响应消息 - 我找不到全局响应 header 的任何内容。

最佳答案

最终创建了一个注释来处理这个问题:

package com.abc.xyz.api.docs.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.swagger.annotations.ResponseHeader;

import com.abc.xyz.api.constants.ApiConstants;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ApiResponses(value = {
@ApiResponse(
code = 200,
message = "Successful status response",
responseHeaders = {
@ResponseHeader(
name = ApiConstants.REQUESTIDHEADER,
description = ApiConstants.REQUESTIDDESCRIPTION,
response = String.class)}),
@ApiResponse(
code = 401,
message = "Successful status response",
responseHeaders = {
@ResponseHeader(
name = ApiConstants.REQUESTIDHEADER,
description = ApiConstants.REQUESTIDDESCRIPTION,
response = String.class)}),
@ApiResponse(
code = 403,
message = "Successful status response",
responseHeaders = {
@ResponseHeader(
name = ApiConstants.REQUESTIDHEADER,
description = ApiConstants.REQUESTIDDESCRIPTION,
response = String.class)}),
@ApiResponse(
code = 404,
message = "Successful status response",
responseHeaders = {
@ResponseHeader(
name = ApiConstants.REQUESTIDHEADER,
description = ApiConstants.REQUESTIDDESCRIPTION,
response = String.class)}),
}
)
public @interface RequestIdMethod {};

有了这个,我可以在我的方法前面添加它作为标记注释:
@RequestMapping(value = "/heartbeat", method = RequestMethod.GET)
@RequestIdMethod
public Heartbeat checkHeartbeat() {
return new Heartbeat(status);
}

这不是很好,因为我需要为每个 http 返回代码重复整个 @ApiResponse 注释块(显然可能还有其他返回代码,但我只涵盖了 Springfox 显示的默认代码)。如果有办法参数化整个 @ApiResponse 块会更好。

关于swagger - Springfox 全局响应头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49892573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com