项目引入 jackson-dataformat-xml 后 RestTemplate 序列化的 JSON 异常问题分析
Posted 毕小宝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目引入 jackson-dataformat-xml 后 RestTemplate 序列化的 JSON 异常问题分析相关的知识,希望对你有一定的参考价值。
背景
项目打包时,为了减少部署包的大小,抽取公共依赖 jar 到一个公共目录。有一个模块使用了 RestTemplate 调用其他模块的服务,使用外部依赖包后,postForObject 返回的 JOSN 格数据不正常主要表现为:
- 布尔类型的的字段被解析成字符串了。
- 数组格式的数据,解析结果又潜套了一层:
这是怎么回事儿呢?
问题分析
原因出在使用外部公共依赖包上面,用自身应用的依赖包没问题,用到整个项目公共目录包就错了。
分析问题出在 RestTemplate 的 JSON 转换上面,对比 jackson 依赖包,发现公共目录多了一个 jackson-dataformat-xml,把它挪出去后,这个项目的 RestTemplate 调用就正常了。
诡异的是,其他还有几个模块都通过外部依赖的方式引入了它,但是没有出现问题,因为服务调用使用的是 Feign 。
启示录
微服务应用实践过程中,依赖包过多、过大是个问题,想要精简依赖,抽取公共部分,不好抽取。最偷懒的办法是,将项目中所有模块的依赖包都放到一个目录中。但是容易带来其他问题:
- 依赖包版本不统一,需要通过父级工程统一版本。
- 有些配置包引入后,模块缺配置的,需要单独放一个目录,比如:spring-security-config;还有本文碰到的 spring-security-config 。
以上是关于项目引入 jackson-dataformat-xml 后 RestTemplate 序列化的 JSON 异常问题分析的主要内容,如果未能解决你的问题,请参考以下文章