我正在尝试向每个 API 添加自定义请求标头,我可以通过向每个 API 添加一段代码来做到这一点
`public ResponseDTO setNames(@RequestHeader(value="my-header",required = false HttpServletRequest httpServletRequest) throws Exception {}`
但是我希望这能够自动完成,就像我们创建新 API 时默认具有授权标头一样。这该怎么做,谁能告诉我一个好的解决方案
如果您正在使用
springdoc-openapi
,您可以使用以下内容
@Configuration
class CustomizeSpringDoc {
@Bean
fun publicApi(): GroupedOpenApi {
return GroupedOpenApi.builder()
.group("add-auth-header")
.addOperationCustomizer { operation, handlerMethod ->
operation.parameters.add(
HeaderParameter()
.name("Authorization")
.description("Access Token")
)
operation
}
.build()
}
}
如果您正在使用
spring-fox
,您可以参考以下链接globalRequestParameters
:
http://springfox.github.io/springfox/docs/current/#quick-start-guides
要对每个请求进行标头验证,您可以使用
Filter
或 HandlerInterceptors
。
Filters
在请求到达 DispatcherServlet
之前拦截请求,使其成为粗粒度任务的理想选择,例如:
HandlerIntercepors
拦截DispatcherServlet
和我们的Controllers
之间的请求。这是在 Spring MVC 框架内完成的,提供对 Handler 和 ModelAndView 对象的访问。
这减少了重复并允许更细粒度的功能,例如:
来源:https://www.baeldung.com/spring-mvc-handlerinterceptor-vs-filter
您可以在 Spring-boot 项目中使用
OpenAPI specification (previously Swagger specification)
,其中,您可以定义 API 以及 Request/Response
标头以及您可能想要返回的任何错误模型或您想要捕获的任何其他自定义字段!
通过定义,您将有权提及诸如
required, minLength, maxLength
等属性
openAPI 插件将处理剩下的事情!
您可以参考这些链接来看看!
添加 Kotlin 答案的
java
版本
@Bean
GroupedOpenApi publicApi() {
return GroupedOpenApi.builder()
.group("add-user-id-header")
.addOperationCustomizer((operation, $) -> {
operation.addParametersItem(
new HeaderParameter()
.name("Authorization")
.description("Access Token")
.required(true)
);
return operation;
})
.build();
}