文档章节

Springboot使用FastJsonHttpMessageConverter导致Swagger2失效

super-wen
 super-wen
发布于 2017/03/06 16:54
字数 351
阅读 1112
收藏 2

依赖版本

  • springboot:1.4.3.RELEASE
  • fastjson:1.2.7。

问题

加入进行api管理,访问 http://localhost:8080/v2/api-docs ,返回结果为{}。

查看相关代码。

controller代码

Swagger2Controller相关代码

返回的Json类

Json相关代码

AbstractMessageConverterMethodProcessor

AbstractMessageConverterMethodProcessor相关代码

FastJsonHttpMessageConverter

FastJsonHttpMessageConverter相关代码

一路debug下来,发现原因在FastJsonHttpMessageConverter.writeInternal方法序列化obj时候返回为{},而obj对象的class为Json。Json只声明了jackson序列化的方式,而fastjson不兼容。

中间出现的其他问题

另一位同事使用的demo没有出现这个问题,而只有我这边出现了问题,排查发现。

我的AbstractMessageConverterMethodProcessor

我的代码debug下来如上图,Converter有9个,使用的是FastJsonHttpMessageConverter

同事的AbstractMessageConverterMethodProcessor

同事的代码debug如上图,Converter有10个,使用的是MappingJackson2HttpMessageConverter

springboot比较坑的地方,可能由于某个配置不同,导致我两使用的json序列化包依赖不同,但是实在找不到这个配置不同在哪,特此记录一下。

##解决方案

  1. 重写Swagger2Controller
  2. 使用jackson序列
  3. 升级fastjson到1.2.15+版本。

3方法是发现问题后,突然在大神的博客中发现早已经解决该bug....

大神博客解决方案:http://blog.didispace.com/fastjson-swagger-solution/

另附笔者当前更新的fastjson1.2.24中代码

   protected void writeInternal(Object obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
        HttpHeaders headers = outputMessage.getHeaders();
        ByteArrayOutputStream outnew = new ByteArrayOutputStream();
        int len = JSON.writeJSONString(outnew, this.fastJsonConfig.getCharset(), obj, this.fastJsonConfig.getSerializeConfig(), this.fastJsonConfig.getSerializeFilters(), this.fastJsonConfig.getDateFormat(), JSON.DEFAULT_GENERATE_FEATURE, this.fastJsonConfig.getSerializerFeatures());
        headers.setContentLength((long)len);
        OutputStream out = outputMessage.getBody();
        outnew.writeTo(out);
        outnew.close();
    }

© 著作权归作者所有

super-wen
粉丝 5
博文 37
码字总数 13546
作品 0
徐汇
程序员
私信 提问
SpringBootBucket 1.0.0 发布,SprintBoot 全家桶

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
2018/03/05
9.1K
17
Spring Boot 全家桶 - SpringBootBucket

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
2018/03/05
12K
8
SpringBootBucket 2.0.4 发布,代号“傲娇的小二晶”

SpringBootBucket 自从1.0.0版本发布后就有好多人喜欢,目前码云上面star数量接近1.2k。上个月还收到了红薯签名的1000 star奖杯,这个我自己也觉得很惊讶。 由于SpringBoot 1.x官方将终止维护...

一刀
2018/09/16
3K
4
SpringBoot集成swagger2

springboot-swagger2-demo 项目介绍 SpringBoot集成swagger2 使用说明 引入maven依赖 启用swagger2 在Controller上添加注释信息(非必须) 启动访问 swagger常用注解 案例 demo地址:https://...

晨猫
2018/10/04
253
0
生产环境下springboot中配置禁用swagger

一、序言 在生产环境下,我们需要关闭swagger配置,避免暴露接口的这种危险行为。 二、方法: 禁用方法1:使用注解@Profile({"dev","test"}) 表示在开发或测试环境开启,而在生产关闭。(推荐...

xiaomin0322
07/10
116
0

没有更多内容

加载失败,请刷新页面

加载更多

SQL性能优化

SQL性能优化 一、SQL的执行顺序 顺序:FROM——ON——JOIN——WHERE——GROUP BY——SUM、COUNT——HAVING——SELECT——DISTINCT——ORDER BY——LIMIT 与写SQL的顺序不同,SQL的执行顺序并...

一字见心
9分钟前
3
0
x001-版本介绍

python版本介绍 目前有2 和 3 有很多企业用的代码是2版本,随着技术的发展,以后用3的会成为大趋势 python3的安装 yum -y install wget gcc zlib-devel bzip2-devel openssl-devel ncurses-d...

侠客行之石头
11分钟前
4
0
聊聊rocketmq的TransientStorePool

序 本文主要研究一下rocketmq的TransientStorePool TransientStorePool rocketmq-all-4.6.0-source-release/store/src/main/java/org/apache/rocketmq/store/TransientStorePool.java publi......

go4it
昨天
6
0
笔记

场外借贷, 质押 ,托管, 永续合约. 场外借贷,n签合同. 新功能 证券交易组负责中信证券机构及个人投资交易相关系统,服务机构及个人投资客户, 涉及到两融、期权、 期货、做市等境内境外创新业...

MtrS
昨天
6
0
Pycharm最新激活码2019----亲测可用

今天来讲解下pycharm的激活码使用 其实非常简单 把激活码填入下面的地方即可。如果不知道在哪里,那么就选菜单栏里的help再选Register就会弹出下面的界面 激活码网址里面有 lookdiv.com 里面...

chenhongjiang
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部