Swagger..Unable to render this definition 提供的定义未指定有效的版本字段

新手上路,请多包涵

无法呈现此定义提供的定义未指定有效的版本字段。

请指明有效的 Swagger 或 OpenAPI 版本字段。支持的版本字段有 swagger: “2.0” 和匹配 openapi: 3.0.n 的字段(例如,openapi: 3.0.0)。

我需要在哪里插入正确的版本以停止下面的错误。 Swagger 编辑器工作正常,但是在启动特定项目时我收到此错误。第一次使用 Swagger。非常感谢

原文由 Paddy Popeye 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.2k
2 个回答

您的 API 定义 缺少 OpenAPI/Swagger 版本号,在本例中为 "swagger": "2.0" 。在开头添加它,如下所示:

 {
    "swagger": "2.0",

    "title" : "Music API Documentation",
    ...

原文由 Helen 发布,翻译遵循 CC BY-SA 4.0 许可协议

我今天遇到了同样的问题。在我的例子中,导致错误的是 Gson 配置。如果您还使用 GsonSpringMVC ,也许您可以试试这个:

我正在使用 spring boot 2.2.4 和 spring fox swagger 2.9.2 建立一个 rest-api 项目。由于我对 GsonJackson 更熟悉,所以我替换了默认的 MessageConverter:

 @Configuration
@EnableWebMvc
public class MvcConfiguration implements WebMvcConfigurer {

    private final Gson gson = new Gson();

    // ......

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        GsonHttpMessageConverter gsonHttpMessageConverter = new GsonHttpMessageConverter();
        gsonHttpMessageConverter.setGson(gson);
        converters.add(gsonHttpMessageConverter);
    }

    // ......

}

之后“ http://localhost:8080/swagger-ui.html ”像所描述的问题一样中断。然后我在浏览器中输入“ http://localhost:8080/v2/api-docs ”,发现 swagger 文档被包裹到另一层,有一个不必要的“值”字段,如下所示:

 {
    value: "{"swagger":"2.0","info":{"description": ......}}"
}

毫无疑问,如果 api-docs 产生类似的东西,swagger 找不到 "swagger":"2.0" 字段。 “值”字段的值是实际的 swagger 文档。

经过一番搜索后,我发现如果你不去管它的话,swagger doc 会被 Gson 错误地序列化。解决方案很简单——为你的 Gson bean 注册一个 swagger 序列化器:

 private final Gson gson = new GsonBuilder()
        .registerTypeAdapter(Json.class, new SpringfoxJsonToGsonAdapter())
        .create();

private static class SpringfoxJsonToGsonAdapter implements JsonSerializer<Json> {
    @Override
    public JsonElement serialize(Json json, Type type, JsonSerializationContext context) {
        final JsonParser parser = new JsonParser();
        return parser.parse(json.value());
    }
}

其中 Json 是springfox提供的类:

 import springfox.documentation.spring.web.json.Json;

希望这会有所帮助。

原文由 Lyux 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏