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());
}
}
}