如何在java中使用BeanUtils.copyProperties

  介绍

本篇文章为大家展示了如何在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 ());   }

运行结果:

如何在java中使用BeanUtils.copyProperties

2。使用BeanUtils.copyProperties转换

因为项目中类似上面的转换多而繁琐,所以很多公司的项目中会使用弹簧框架里的BeanUtils。copyProperties来做对象转换,代码如下所示:

OrderVO  OrderVO =, new  OrderVO ();   BeanUtils.copyProperties (orderDTO, orderVO);

一行代码搞的定,很方便,运行结果也和原来一模一样。

不过这个工具带来便利的同时,也带来了很多问题,稍微不注意就会踩坑,接下来就总结下使用这个工具常见的几个坑。

3。踩坑经历

3.1包装类型转基本类型问题

<强> . lang。IllegalArgumentException

细心的你可能会发现,OrderDTO中的userId字段,我定义的是长类型:

如何在java中使用BeanUtils。copyProperties

而OrderVO中的userId字段,我定义的是长类型:

如何在java中使用BeanUtils。copyProperties

然后我们运行下下面所示的代码:

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 异常:

如何在java中使用BeanUtils.copyProperties

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