无法呈现此定义提供的定义未指定有效的版本字段。
请指明有效的 Swagger 或 OpenAPI 版本字段。支持的版本字段有 swagger: “2.0” 和匹配 openapi: 3.0.n 的字段(例如,openapi: 3.0.0)。
我需要在哪里插入正确的版本以停止下面的错误。 Swagger 编辑器工作正常,但是在启动特定项目时我收到此错误。第一次使用 Swagger。非常感谢
原文由 Paddy Popeye 发布,翻译遵循 CC BY-SA 4.0 许可协议
无法呈现此定义提供的定义未指定有效的版本字段。
请指明有效的 Swagger 或 OpenAPI 版本字段。支持的版本字段有 swagger: “2.0” 和匹配 openapi: 3.0.n 的字段(例如,openapi: 3.0.0)。
我需要在哪里插入正确的版本以停止下面的错误。 Swagger 编辑器工作正常,但是在启动特定项目时我收到此错误。第一次使用 Swagger。非常感谢
原文由 Paddy Popeye 发布,翻译遵循 CC BY-SA 4.0 许可协议
我今天遇到了同样的问题。在我的例子中,导致错误的是 Gson
配置。如果您还使用 Gson
和 SpringMVC
,也许您可以试试这个:
我正在使用 spring boot 2.2.4 和 spring fox swagger 2.9.2 建立一个 rest-api 项目。由于我对 Gson
比 Jackson
更熟悉,所以我替换了默认的 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 许可协议
8 回答5.7k 阅读✓ 已解决
9 回答9.1k 阅读
6 回答4.6k 阅读✓ 已解决
5 回答3.4k 阅读✓ 已解决
7 回答9.6k 阅读
4 回答7.9k 阅读✓ 已解决
5 回答7k 阅读✓ 已解决
您的 API 定义 缺少 OpenAPI/Swagger 版本号,在本例中为
"swagger": "2.0"
。在开头添加它,如下所示: