maptruct复制对像

╄→尐↘猪︶ㄣ 提交于 2019-12-07 16:15:38

现在项目中要求用mapstruct

每个接口要有自己的接收参数对象,就是controller层的入参对象,以Req结尾,比如:IndicatorReq

规定service层不能直接用IndicatorReq,要转换为IndicatorDTO

service返回结果也是DTO结尾,比如IndicatorResultDTO

在controller层返回不能直接用IndicatorResultDTO,要转换为IndicatorResultResp

 

所有一般有四个对象:IndicatorReq -> IndicatorDTO、IndicatorResultDTO -> IndicatorResultResp

在controller层转换

1.引入mapstruct依赖

2.下载插件,idea有对应的mapstruct版本,不对应报错

3.代码:

controller层

public List<SelectDimensionResp> getEachDimension (IndicatorReq indicatorReq){

  //req 转DTO

  IndicatorDTO indicatorDTO = RegulationTransfer.INSTANCE.toSelectDimensionDTO(indicatoReq);

  //DTO作为参数传入service层

  List<SelectDimensionDTO> selectDimensionDTOS = service.getEachDimension(indicatorDTO);

//把返回DTO 转 Resp

  List<SelectDimensionResp> selectDimensionResps = Regulation.INSTANCE.toSelectionDimensionResp(selectDimensionDTOS );

return   selectDimensionResps;

}

 

定义转换接口,注意时接口

@Mapper

public interface RegulationTransfer{

  RegulationTransfer INSTANCE = Mapper.getMapper(RegulationTransfer.class);

  //Req 转 DTO ,属性名字一样

  IndicatorDTO  toSelectDimensionDTO(IndicatorReq indicatorReq);

 

//返回DTO 转  Resp 集合也一样这样转,对象里面有对象也是一样转

 List<SelectDimensionResp> toSelectDimensionResp(List<SelectDimensionDTO> selectDimensionDTOList);

 

//上面两个时属性名字一样的

//如果属性不一样,如下target表示转换成的对象里面的属性名称,attach表示是AttachDTO里的一个属性,这个属性是一个对象,attach里又有一个属性fileSize

@Mapping(source = "attach.fileSize",target ="fileSize")

@Mapping(source="attach.fileKey",target="url")

FlowTaskAttachment attachDtoPo (AttachDTO dto)

 

}

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!