如何在 Springfox v3 中指定全局 header 参数的允许值?

How do I specify allowed values for global header parameters in Springfox v3?

我尝试将 springfox 的 swagger ui 配置从 2.9.2 版迁移到 3.0.0 版。

版本 2.9.2 中,我可以做这样的事情来指定我的全局允许的值 headers:

@Bean
public Docket swaggerDocket() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            [...]
            .build()
            .groupName("Some API")
            .directModelSubstitute(LocalDate.class, java.sql.Date.class)
            .useDefaultResponseMessages(false)
            .globalOperationParameters(
                    Arrays.asList(new ParameterBuilder()
                            .name("Environment")
                            .modelRef(new ModelRef("string"))
                            .allowableValues(new AllowableListValues(List.of("A","B","C"), "string"))
                            .parameterType("header")
                            .required(true)
                            .build()));
}

但在版本 3.0.0 “globalOperationParameters” 中被标记为已弃用。 我尝试使用新的 "globalRequestParameters" 来获得与旧版本相同的结果:

@Bean
public Docket swaggerDocket(TypeResolver typeResolver) {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            [...]
            .build()
            .groupName("Some API")                
            .directModelSubstitute(LocalDate.class, java.sql.Date.class)
            .useDefaultResponseMessages(false)
            .globalRequestParameters(List.of(createRequestParameter("Environment", true)));
}

private RequestParameter createRequestParameter(String headerName, boolean required) {
    return new RequestParameterBuilder()
            .name(headerName)
            .required(required)
            .query(q -> q.model(modelSpecificationBuilder -> modelSpecificationBuilder.scalarModel(ScalarType.STRING)))
            .in(ParameterType.HEADER)
            .build();
}

有没有办法添加允许值列表

在弄乱了 intelliJ 自动完成功能后弄清楚了这一点。在查询中,使用模型,然后使用 enumerationFacet 方法。我会保持快速和简单:

在您的 createRequestParameter 中使用代码:

final String bestCookie = "Peanut Butter Chocolate Chunk";
new RequestParameterBuilder()
        .in("path")
        .name("Best Cookies")
        .description("Put your favorite cookie here")
        .query(q ->
            q.model(m -> m.scalarModel(ScalarType.STRING))
                    .defaultValue(bestCookie)
                    .enumerationFacet(e -> e.allowedValues(
                            new AllowableListValues(
                                    List.of(bestCookie, "There's no other best cookies",
                                            "You heard what I said"),
                                    "string")))
        )
        .required(true)
        .build();

我会包括下拉菜单的图片,但我没有 post 它们的声誉。