现在项目中要求用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)
}
来源:CSDN
作者:hooroom
链接:https://blog.csdn.net/weixin_41126842/article/details/103241130