springdoc-openapi-ui将标头参数添加到生成的swagger

问题描述

在我的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'

但这不起作用。

我的问题:

  1. 是否可以使用应用程序配置来修改我的招摇结果?
  2. 我想定义参数模板并将其添加到所有端点,如何实现?

解决方法

最后,我决定使用其他方法。 我定义了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允许根据测试人员的要求测试具有授权标头或不具有授权标头的端点。 enter image description here

干杯!

,

您可以使用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;
        };
    }
}