Swagger..Unable to render this definition The provided definition does not specify a valid version

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());
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章