Spring 的 BeanUtils 踩坑记,你是不是遇到过这些问题?

Posted 文宇肃然

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 的 BeanUtils 踩坑记,你是不是遇到过这些问题?相关的知识,希望对你有一定的参考价值。

背景

最近项目中在和第三方进行联调一个接口,我们这边发送http请求给对方,然后接收对方的回应,代码都是老代码。根据注释,对方的SDK中写好的Request类有一个无法序列化的bug,所以这边重新写了一个Request类,基本属性都是相同的,但是重点是有一个属性是静态内部类,还有两个是list属性,类似于下面这样:

private List<Order> orders;
private AddRequest.Ticket ticket;
private List<Payment> payments;

AddRequest就是我们自己重写的请求类,他们SDK中的请求类是MixAddRequest,我们组装好请求参数后利用Spring的BeanUtils的copyProperties方法将AddRequest中的属性拷贝到MixAddRequest,然后发送请求。到此为止,照理说一切完美。

结果请求失败,纳尼?对方说缺少一个必要的字段,参数校验不通过,一查字段名称,是Ticket这个类里面的某个字段,赶紧看代码,心里充满对老代码的自信,想着一定是哪里搞错了,或者是他们那边偷偷动了代码,把字段从可选改为了必选,嘿嘿。

果然在代码里找到了设置的地方,这下应该是他们的问题确信无疑了,再开一把调试,准备宣判他们的死刑。结果发现发给他们的请求就是没有这个字段。。。中间只有一个Spring的copy属性的方法,当时觉得很诡异。

由于中间只有这么一行代码,玄机肯定在这里面,初步怀疑是两个静态内部类不同导致,所以自己写Demo,准备搞一把这个BeanUt

以上是关于Spring 的 BeanUtils 踩坑记,你是不是遇到过这些问题?的主要内容,如果未能解决你的问题,请参考以下文章

Spring @Transactional踩坑记

记一次 Spring 事务配置踩坑记

踩坑记:根据类型获取Spring容器中的Bean

踩坑记:根据类型获取Spring容器中的Bean

踩坑记——使用slf4j+logback记录日志

踩坑记SpringBoot使用Logback