首页 > 解决方案 > Spring boot 和 springfox-swagger2 - $ref 值必须是符合 RFC3986 的百分比编码 URI - 提供的解决方案

问题描述

如果您使用的是 springfox-swagger2 库,则在泛型类型方面可能会遇到问题。在使用菱形括号的情况下,Swagger 将生成无效规范,从而导致 Swagger 编辑器中出现验证错误(“”$ref 值必须是符合 RFC3986 的百分比编码 URI”)。

您得到的错误可能如下所示:

路径中的语义错误。/v1/car.post.parameters.0.schema.$ref $ref 值必须是符合 RFC3986 的百分比编码 URI 跳转到第 45 行

标签: javaspring-bootswagger-uiswagger-2.0

解决方案


我在Springfox文档下发现的问题的解决方案

默认情况下,具有泛型的类型将用 '\u00ab'(<<)、'\u00bb'(>>) 和逗号标记。对于像 swagger-codegen 这样的东西,这可能会出现问题。您可以通过实现自己的 GenericTypeNamingStrategy 来覆盖此行为。例如,如果您希望 List 编码为 'ListOfString' 而 Map<String, Object> 编码为 'MapOfStringAndObject' 您可以在插件自定义期间将 forCodeGeneration 自定义选项设置为 true: docket.forCodeGeneration(true|false);

这是一个添加更改的示例 Docket 配置:

@Configuration    
@EnableSwagger2
public class CommonConfiguration {

   @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .useDefaultResponseMessages(false)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .enableUrlTemplating(false)
                .forCodeGeneration(true);
    }
}

推荐阅读