Unable to render this definition The provided definition does not specify a valid version field.
Please indicate a valid Swagger or OpenAPI version field. Supported version fields are swagger: “2.0” and those that match openapi: 3.0.n (for example, openapi: 3.0.0).
这个错误是我访问http://localhost:8080/swagger-ui.html
出现的,但是我访问http://localhost:8080/v2/api-docs
返回的数据没有问题,我的接口描述也正确
导致错误的是Gson配置。 如果你还将Gson与SpringMVC一起使用,也许可以尝试一下:
我使用spring boot 2.1.4和spring fox swagger 2.9.2设置rest-api项目。 由于我比Jackson更熟悉Gson,因此我替换了默认的MessageConverter:
@Configuration
public class WebMvcJsonConfig {
@Bean
GsonHttpMessageConverter gsonHttpMessageConverter() {
GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
converter.setGson(
new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").serializeNulls()
.registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory())
.create());
return converter;
}
}
可以想象得到,可视化接口描述页面,是通过接口渲染得到的,可以推测是json处理错误。所以,最终,解决方案很简单:在Gson bean注册一个序列化器
@Configuration
public class WebMvcJsonConfig {
@Bean
GsonHttpMessageConverter gsonHttpMessageConverter() {
GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
converter.setGson(
new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").serializeNulls()
.registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory())
.registerTypeAdapter(Json.class, new WebMvcJsonConfig.SpringfoxJsonToGsonAdapter())
.create());
return converter;
}
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());
}
}
}