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