介绍
本篇文章为大家展示了如何在java中使用BeanUtils.copyProperties,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
1。原始转换
提起对象转换,每个程序员都不陌生,比如项目中经常涉及到的做,DTO,签证官之间的转换,举个例子,假设现在有个OrderDTO,定义如下所示:
public class OrderDTO { ,,,private long id; ,,,private Long 标识; ,,,private String orderNo; ,,,private Date gmtCreated; ,,,//,省略,设置方法 }
有个OrderVO,定义如下所示:
public class OrderVO { ,,,private long id; ,,,private long 标识; ,,,private String orderNo; ,,,private Date gmtCreated; ,, ,,//,省略,设置方法 }
如果不使用任何转换工具,代码是下面这样的:
public static void main (String [], args), { ,,,OrderDTO OrderDTO =, new OrderDTO (); ,,,orderDTO.setId(1升); ,,,orderDTO.setUserId (123 l); ,,,orderDTO.setOrderNo (“20210518000001”); ,,,orderDTO.setGmtCreated (new 日期()); ,,,OrderVO OrderVO =, new OrderVO (); ,,,orderVO.setId (orderDTO.getId ()); ,,,orderVO.setUserId (orderDTO.getUserId ()); ,,,orderVO.setOrderNo (orderDTO.getOrderNo ()); ,,,orderVO.setGmtCreated (orderDTO.getGmtCreated ()); ,,,System.out.println (orderVO.getId ()); ,,,System.out.println (orderVO.getUserId ()); ,,,System.out.println (orderVO.getOrderNo ()); ,,,System.out.println (orderVO.getGmtCreated ()); }
运行结果:
2。使用BeanUtils.copyProperties转换
因为项目中类似上面的转换多而繁琐,所以很多公司的项目中会使用弹簧框架里的BeanUtils。copyProperties来做对象转换,代码如下所示:
OrderVO OrderVO =, new OrderVO (); BeanUtils.copyProperties (orderDTO, orderVO);
一行代码搞的定,很方便,运行结果也和原来一模一样。
不过这个工具带来便利的同时,也带来了很多问题,稍微不注意就会踩坑,接下来就总结下使用这个工具常见的几个坑。
3。踩坑经历
3.1包装类型转基本类型问题
<强> . lang。IllegalArgumentException 强>
细心的你可能会发现,OrderDTO中的userId字段,我定义的是长类型:
而OrderVO中的userId字段,我定义的是长类型:
然后我们运行下下面所示的代码:
public static void main (String [], args), { ,,,OrderDTO OrderDTO =, new OrderDTO (); ,,,orderDTO.setId(1升); ,,,orderDTO.setUserId(空); ,,,orderDTO.setOrderNo (“20210518000001”); ,,,orderDTO.setGmtCreated (new 日期()); ,,,OrderVO OrderVO =, new OrderVO (); ,,,BeanUtils.copyProperties (orderVO orderDTO也); }
会看到代码抛了<代码> . lang。IllegalArgumentException 代码>异常:
3.2空格问题
假设OrderVO的orderNo字段,是用户自定义的,用户不小心输入了空格,使用BeanUtils。copyProperties后,空格会带入到OrderDTO的orderNo字段,如果不小心,就会把脏数据落到数据库(而我们希望的是去除空格再落库的),造成一系列后续问题:
public static void main (String [], args), { ,,,OrderVO OrderVO =, new OrderVO (); ,,,orderVO.setId(1升); ,,,orderVO.setUserId (123 l); ,,,//,模拟空格场景 ,,,orderVO.setOrderNo (“, 20210518000001,“); ,,,orderVO.setGmtCreated (new 日期()); ,,,OrderDTO OrderDTO =, new OrderDTO (); ,,,BeanUtils.copyProperties (orderDTO orderVO也); ,,,System.out.println (orderDTO.getOrderNo ()); }如何在java中使用BeanUtils.copyProperties