解决Spring使⽤
该问题解决已合并⼊fastjson 1.2.15版本,请使⽤1.2.15+版本就不需要做下⾯的改造了
FastJson是阿⾥巴巴开源的⾼性能JSON转换⼯具。我们在使⽤Spring MVC需要进⾏JSON转换时,通常会使⽤FastJson提供的FastJsonHttpMessageConverter。但是在我们使⽤了Swagger2的⼯程中使⽤它之后,我们的Api⽂档就⽆法⼯作了(虽然swagger-ui界⾯可以展现,但是没有任何api内容,并且通过访问/v2/api-docse,我们得到的返回时{},⽽不是之前的⽂档配置内容了。
通过下载FastJson源码之后,单步调试可以确定问题在于FastJson默认提供的Serializer转换
springfox.documentation.spring.web.json.Json的结果为{}。
解决⽅法:
1、fastjson版本为1.2.10以上,fastjson 1.2.15以下时,FastJsonHttpMessageConverter没有暴露fastjson对Serializer配置。更新到新版本之后,可以⽅便我们加⼊对springfox.documentation.spring.web.json.Json的序列化⽀持。
public class SwaggerJsonSerializer implements ObjectSerializer, ObjectDeserializer {
public final static SwaggerJsonSerializer instance = new SwaggerJsonSerializer();
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { SerializeWriter out = Writer();
Json json = (Json) object;
out.write(json.value());
}
fastjson怎么用@Override
public T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
return null;
}
@Override
public int getFastMatchToken() {
return 0;
}
}
FastJsonHttpMessageConverter中加⼊⾃定义序列化类
实现FastJsonHttpMessageConverter的⼦类,并在构造函数中,加⼊springfox.documentation.spring.web.json.Json类与SwaggerJsonSerializer的映射关系,使得在转换的时候,碰到springfox.documentation.spring.web.json.Json就使⽤我们⾃⼰实现的SwaggerJsonSerializer来进⾏转换,具体如下:
public class FastJsonHttpMessageConverterEx extends FastJsonHttpMessageConverter {
public FastJsonHttpMessageConverterEx() {
super();
}
}
最后,在配置⽂件中⽤FastJsonHttpMessageConverterEx替换原来的FastJsonHttpMessageConverter即可。
2、直接升级fastjson版本。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论