(生产环境玄学问题)jackson版本之坑,多pom项目一定注意引用jar版本冲突!

28 阅读2分钟

你的名字叫阿迷

你有两台服务器

代码都是同一套

一到一服就报错

这是我最近遇到的一个问题

同一个请求,一样的前端传参,每当走到01服务器的时候,就会报错,提示

org.codehaus.jackson.map.exc.UnrecognizedPropertyException:Unrecognized field "plan_start_time"(class.domain.dto.request.course.RoomListRegDTO),not marked as ignorable.domain.dto.request.course.RoomListRegDTO["plan_start_time"])

说我们请求的JSON中包含字段 plan_start_time,但目标DTO类 RoomListReqDTO 没有这个字段

那就很奇怪了,这个class类中是有这个字段的,不是_格式也无所谓,会自动转,02服务器好使就说明不是这个问题

image.png

因为没有任何业务编写类提示报错,这证明在参数校验阶段就错了,请求并没有走到具体Controller里,我也尝试了网上搜到的@JsonIgnoreProperties(ignoreUnknown = true)或者@JsonProperty,部署后都没效果,乂,一步一步看吧

一模一样的jar包,没看出任何问题

image.png

难道是jdk版本

image.png 别说哈,确实不一样,所以我去01服务器修改了catalina.sh配置文件,下载好对应版本进行指定

image.png

重启后依旧大败而归

麻了,真麻了,jar一样,代码一样,服务器环境一样,请求参数一样,问题到底还能出在哪里?

偶然的又一次排查,我发现

image.png

为什么这个jackson既有1版本的引用,又有2版本的引用呢?

抱着试一试的心态

备份好这四个文件-rm删除-重启-关闭另一个服务器-请求-成功了!

问题到这里就解决了,确实是因为版本冲突的原因


但是,为什么在02服务器上,没有产生请求错误的情况呢?

这也是我耗费了很多时间都没有找到这个bug的根本原因

也许是类加载顺序不同的原因?(主打猜测)

各位局座可有高见

image.png