问题描述
在我的spring boot应用程序中,我具有在我的springboot应用程序中通过标头参数验证的端点。 当前的招摇json看起来像这样:
// part of current swagger.json
...
"paths": {
"/path1/{param1}": {
"get": {
"parameters": [
{
"name": "param1","in": "path","type": "string","required": true
}
]
}
}
}
...
我想使用springdoc-openapi-ui
配置添加缺少的参数,所以它看起来像这样:
// I want to achieve swagger.json which contains additional parameter
...
"paths": {
"/path1/{param1}": {
"get": {
"parameters": [
{
"name": "param1","required": true
},{
"name": "missingParam","in": "header","required": true
}
]
}
}
}
...
我尝试通过从Common Parameters for Various Paths添加到我的appplication.yml
解决方案中来实现这一目标
#application.yml
...
components:
parameters:
hiddenParam:
in: header
name: missingParam
required: true
schema:
type: string
paths:
/path1:
get:
parameters:
- $ref: '#/components/parameters/hiddenParam'
但这不起作用。
我的问题:
解决方法
最后,我决定使用其他方法。 我定义了security scheme并将其全局应用为authorization header。
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.info(new Info().title("My App").version("1.0.0"))
// Components section defines Security Scheme "mySecretHeader"
.components(new Components()
.addSecuritySchemes("mySecretHeader",new SecurityScheme()
.type(SecurityScheme.Type.APIKEY)
.in(SecurityScheme.In.HEADER)
.name("missingParam")))
// AddSecurityItem section applies created scheme globally
.addSecurityItem(new SecurityRequirement().addList("mySecretHeader"));
}
现在swagger-ui.html
允许根据测试人员的要求测试具有授权标头或不具有授权标头的端点。
干杯!
,您可以使用OperationCustomizer
来添加诸如header之类的全局参数,如下所示。这会将您的parameter
添加到每个服务中
@Configuration
public class SwaggerConfiguration {
@Bean
public OperationCustomizer customGlobalHeaders() {
return (Operation operation,HandlerMethod handlerMethod) -> {
Parameter missingParam1 = new Parameter().in(ParameterIn.HEADER.toString()).schema(new StringSchema())
.name("missingParam1").description("header description2").required(true);
Parameter missingParam2 = new Parameter().in(ParameterIn.HEADER.toString()).schema(new StringSchema())
.name("missingParam2").description("header description2").required(true);
operation.addParametersItem(missingParam1);
operation.addParametersItem(missingParam2);
return operation;
};
}
}