java~modelMapper需要注意的几点

对于modelMapper来说,主要实现的是对象与对象的赋值,在这微服务里的数据传输对象中用的比较多,DTO这个对象是从业务模型抽象出来的,满足某一种业务,它与数据持久化模型没有关系,而如果我们把数据表模型取出后,以DTO返回给使用端时,就需要一种赋值机制,这就是modelMapper需要做的事。

在目前开发过程中,由于使用了lombok插件,使得我们减少了很多重复的代码,它以注解的形式体现在代码上,即@getter表示对外公司读方法,@setter对外公开写方法,而后者在设计时一般不对外公开,为对象的赋值一般通过@Builder来实现,但这对于modelMapper是一件坏事 ,它必须要求你公开@setter注解,才可以为你赋值,这也是可以想像的,modelMapper的机制应该就是说取所有字段 ,然后使用自己的setter方法为它赋值。

注意地址

  1. 必须公开@setter注解
  2. DTO对象不能继承原来的模型,应该新建一个单纯的实体,因为注解是可以从父类集成下来的
@Builder(toBuilder = true)
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {
  private String name;
}

下面是数据模型

复制代码
@Builder(toBuilder = true)
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo {
  private String name;
  private String email;
  @MinMoney(message = "金额不能小于0.")
  @MaxMoney(value = 10, message = "金额不能大于10.")
  private Money price;

}
复制代码

下面是使用方法,同时可以使用BeanUtils类的方法也可以实现。

modelMapper方法

  ModelMapper modelMapper = new ModelMapper();        
  userDto = modelMapper.map(userinfo, UserDto.class); 

BeanUtils方法

 UserInfo userinfo= UserInfo.builder().name("zzl").build();
 UserDto userDto=new UserDto();
 BeanUtils.copyProperties(userinfo,userDto);

感谢阅读!

posted @   张占岭  阅读(4707)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2012-05-23 面向服务架构~面向服务的API是统一接口还是具体业务使用具体的接口?
2012-05-23 将不确定变为确定~Linq的Group是否可以根据多个字段进行分组
2011-05-23 大家一起来学习一下面向对象的三层架构吧!今天我来说说Entity有时也叫MODEL实体层!
2011-05-23 通过枚举返回指定字符结果[有时,好的程序就是一种规范,一种对事物的理解和认识,一种层次]
2011-05-23 通过一个抢购的需要,而引发的购物车问题(这个抢购是一个与主站不同的域名)
点击右上角即可分享
微信分享提示