Swagger 2 显示的是XML而不是JSON格式解决方法

作者: 时间: 2019-05-27 分类: 技术文章 | 0条评论 |

最近一直在用Yapi+Swagger编写API接口文档的时候,一直没什么问题,但是今天有一个项目却发现不对劲,因为Swagger的JSON无法自动同步到Yapi,导致一直无法在线自动生成最新文档。后来去查看,才发现是因为Swagger生成的JSON外面多了一层<json>XXX</json>,也就是变成了xml类型。

Swagger 2 显示的是XML而不是JSON格式解决方法

Swagger 2 显示的是XML而不是JSON格式解决方法

异常原因(第1种):

因为Spring MVC默认让服务器在浏览器中呈现XML而不是JSON(其实这个只是表现原因,根本原因是下面第2个原因导致)。

解决方法:

@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        List<MediaType> list = new ArrayList<>();
        list.add(MediaType.APPLICATION_JSON_UTF8);
        list.add(new MediaType("text", "html", Charset.forName("UTF-8")));
        list.add(new MediaType("application", "*+json", Charset.forName("UTF-8")));
        converter.setSupportedMediaTypes(list);
        converters.add(converter);
    }
}


Swagger 2 显示的是XML而不是JSON格式解决方法

Swagger 2 显示的是XML而不是JSON格式解决方法

其实你按照上面的做法处理,基本上可以解决问题,但是如果你仔细看,就会发现 /v2/api-docs?group=oneid 接口返回的 content-type 却是text/html,如果你想彻底解决问题,那么就看第2种方法。

异常原因(第2种):

真实原因是项目里面使用了 jackson-dataformat-xml 依赖包,导致项目被默认改成xml类型输出。

解决方法:

File——>Project Structure——>Libraries——>找到“jackson-dataformat-xml”把它删除引用即可。删除之后,就彻底完事了~~并不需要添加第1种方法的代码,仅仅是删除引用就行。如果你不能删除引用,那就用第1种方法吧!

写在后面:

Swagger 2 显示的是XML而不是JSON格式解决方法

Swagger 2 显示的是XML而不是JSON格式解决方法

如果你们发现,按照上面2种方法做了之后,swagger这边全都正常了,但是Yapi那边无法同步接口数据,请检查你们的API注解,一般都是因为注解写错了,最常见的就是注解里面有JSON字符串,但是没有转义,然后一直报错。解决方法就是转义~~如上图~~

All by flydoos 2019-05-27

本文采用 CC协议 发布,转载请注明:转载自 吾乐吧软件站

本文链接地址:http://www.wuleba.com/?p=29985

发表评论


微软MSDN资源免费订阅,MSDN 我告诉你