向所有 swagger 请求添加标头

mun*_*ger 3 java rest swagger swagger-ui

我目前正在向旧项目添加 swagger,我想向所有请求添加标头。该应用程序有一个过滤器,用于检查您的应用程序版本是否足够高,因此要求客户端发送version头。

是否可以将其添加到所有请求中,或者我是否必须重写所有端点才能具有此标头参数(有很多)。如果有一个全局标头参数就太好了。

应该补充的是,我想在 Java 中执行此操作,而不是直接更改 json/yaml

Sab*_*han 7

您可以在配置中添加全局操作参数Docket,如最后一行所示 -.globalOperationParameters(operationParameters())

我正在展示更广泛的配置,但您对这个问题的关注点应该只是最后一行。

@Bean
    public Docket swaggerPlugin() {
    return new Docket(DocumentationType.SWAGGER_2)
        .select()
        .paths(PathSelectors.any())
        .apis(Predicates.or(
            RequestHandlerSelectors
                .basePackage(....),
            RequestHandlerSelectors
                .basePackage(....)))
        .build().directModelSubstitute(LocalDate.class, String.class)
        .genericModelSubstitutes(ResponseEntity.class)
        .apiInfo(apiInfo())
        .securitySchemes(Lists.newArrayList(apiKey()))
        .securityContexts(Arrays.asList(securityContext()))
        .globalOperationParameters(operationParameters());
    }


private List<Parameter> operationParameters() {
    List<Parameter> headers = new ArrayList<>();
    headers.add(new ParameterBuilder().name("HEADER_1")
        .description("HEADER_1 DESC")
        .modelRef(new ModelRef("string")).parameterType("header")
        .required(false).build());

    headers.add(new ParameterBuilder().name("HEADER_2")
        .description("HEADER_2 DESC")
        .modelRef(new ModelRef("string")).parameterType("header")
        .required(false).defaultValue("0").build());
    return headers;
    }
Run Code Online (Sandbox Code Playgroud)

如图所示,还可以提供默认值。此外,这两个标头将在 Swagger UI 上可见,因为可以为每个请求手动输入文本字段和值。