java - 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 行
解决方案
默认情况下,具有泛型的类型将用 '\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);
}
}
推荐阅读
- sql - 使用多个分隔符解析字符串
- r - 之前的两个ggplot2转换为plotly获得交互
- c - 返回类型“float *”但预期为“float”时类型不兼容
- javascript - Javascript 更新 $.post 以阻止
- python - 您能否创建一个 If 语句,其中程序采取的下一步是基于列表中的项目数?
- tensorflow - Keras 中的 Resnetv2 实现
- android - 是否可以在 Google Chromecast 上切换 mkv 文件中的音轨?
- reactjs - 将字符串数据从 JSON API 转换为 js 中的 int 的任何方式或解决方案?
- flutter - 在 Intellij IDEA 中创建新的 dart 项目时,在 dart 模板下找不到 Flutter Web 应用程序选项
- c++ - C ++在模板参数中传递模板的构造函数值