当前位置:   article > 正文

Mapstruct自定义转换规则

mapstruct自定义转换

一、定义转换规则

定义的类上边增加@Named注解标注转换名称

定义转换规则

  1. import cn.hutool.core.util.StrUtil;
  2. import com.alibaba.fastjson.JSON;
  3. import org.mapstruct.Named;
  4. import org.springframework.stereotype.Component;
  5. import java.util.List;
  6. import java.util.Objects;
  7. /**
  8. * Mapping通用转换
  9. */
  10. @Component
  11. public class TypeConversionWorker {
  12. /**
  13. * 对象转json字符串
  14. *
  15. * @param obj
  16. * @return
  17. */
  18. @Named("toJsonString")
  19. public String toJsonString(Object obj) {
  20. if (Objects.isNull(obj)) {
  21. return null;
  22. }
  23. return JSON.toJSONString(obj);
  24. }
  25. /**
  26. * json字符串转对象
  27. *
  28. * @param jsonStr
  29. * @return
  30. */
  31. @Named("jsonStringToNameObject")
  32. public List<Name> jsonStringToObject(String jsonStr) {
  33. if (StrUtil.isEmpty(jsonStr)) {
  34. return null;
  35. }
  36. List<Name> names = JSON.parseArray(jsonStr, Name.class);
  37. return names;
  38. }
  39. /**
  40. * json字符串转对象
  41. *
  42. * @param jsonStr
  43. * @return
  44. */
  45. @Named("jsonStringToNameValueObject")
  46. public List<NameValue> jsonStringToNameValueObject(String jsonStr) {
  47. if (StrUtil.isEmpty(jsonStr)) {
  48. return null;
  49. }
  50. List<NameValue> names = JSON.parseArray(jsonStr, NameValue.class);
  51. return names;
  52. }
  53. /**
  54. * json字符串转对象
  55. *
  56. * @param jsonStr
  57. * @return
  58. */
  59. @Named("jsonStringToValueObject")
  60. public List<Value> jsonStringToValueObject(String jsonStr) {
  61. if (StrUtil.isEmpty(jsonStr)) {
  62. return null;
  63. }
  64. List<Value> names = JSON.parseArray(jsonStr, Value.class);
  65. return names;
  66. }
  67. }

二、使用转换规则

使用@Mapper注解uses引入转换规则,eg:uses = TypeConversionWorker.class

 @Mapping使用qualifiedByName标识转换规则,eg:qualifiedByName = "toJsonString"。

  1. import org.mapstruct.Mapper;
  2. import org.mapstruct.Mapping;
  3. import org.mapstruct.factory.Mappers;
  4. import java.util.List;
  5. @Mapper(uses = TypeConversionWorker.class)
  6. public interface ShopConvert {
  7. ShopConvert INSTANCE = Mappers.getMapper(ShopConvert.class);
  8. @Mapping(target = "serviceField", source = "serviceField", qualifiedByName = "jsonStringToNameObject")
  9. @Mapping(target = "costField", source = "costField", qualifiedByName = "jsonStringToNameValueObject")
  10. @Mapping(target = "examinationField", source = "examinationField", qualifiedByName = "jsonStringToValueObject")
  11. List<ShopRespVO> convertList(List<ShopDO> list);
  12. List<ShopSimpleRespVO> convertList02(List<ShopDO> list);
  13. @Mapping(target = "serviceField", source = "serviceField", qualifiedByName = "jsonStringToNameObject")
  14. @Mapping(target = "costField", source = "costField", qualifiedByName = "jsonStringToNameValueObject")
  15. @Mapping(target = "examinationField", source = "examinationField", qualifiedByName = "jsonStringToValueObject")
  16. ShopRespVO convert(ShopDO bean);
  17. @Mapping(target = "serviceField", source = "serviceField", qualifiedByName = "toJsonString")
  18. @Mapping(target = "costField", source = "costField", qualifiedByName = "toJsonString")
  19. @Mapping(target = "examinationField", source = "examinationField", qualifiedByName = "toJsonString")
  20. ShopDO convert(ShopCreateReqVO bean);
  21. @Mapping(target = "serviceField", source = "serviceField", qualifiedByName = "toJsonString")
  22. @Mapping(target = "costField", source = "costField", qualifiedByName = "toJsonString")
  23. @Mapping(target = "examinationField", source = "examinationField", qualifiedByName = "toJsonString")
  24. ShopDO convert(ShopUpdateReqVO bean);
  25. }

 涉及到实体(非重点)

  1. import io.swagger.annotations.ApiModel;
  2. import io.swagger.annotations.ApiModelProperty;
  3. import lombok.Data;
  4. import lombok.EqualsAndHashCode;
  5. import java.util.Date;
  6. import java.util.List;
  7. @ApiModel("管理后台 - 商品信息 Response VO")
  8. @Data
  9. @EqualsAndHashCode(callSuper = true)
  10. public class ShopRespVO extends ShopBaseVO {
  11. @ApiModelProperty(value = "商品编号", required = true, example = "1024")
  12. private Long id;
  13. @ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
  14. private Date createTime;
  15. /*分类名称*/
  16. private String systemClassificationName;
  17. /*前端回填ID*/
  18. private List<Long> ids;
  19. }
  1. import io.swagger.annotations.ApiModelProperty;
  2. import lombok.Data;
  3. import org.hibernate.validator.constraints.Length;
  4. import java.math.BigDecimal;
  5. import java.util.List;
  6. /**
  7. * 商品 Base VO,提供给添加、修改、详细的子 VO 使用
  8. * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
  9. */
  10. @Data
  11. public class ShopBaseVO {
  12. /**
  13. * 商品名称
  14. */
  15. @ApiModelProperty("商品名称")
  16. @Length(max= 255,message="编码长度不能超过255")
  17. private String name;
  18. /**
  19. * 商品分类
  20. */
  21. @ApiModelProperty("商品分类")
  22. private Long systemClassificationId;
  23. /**
  24. * 标准价格
  25. */
  26. @ApiModelProperty("标准价格")
  27. private BigDecimal price;
  28. /**
  29. * 最低价格
  30. */
  31. @ApiModelProperty("最低价格")
  32. private BigDecimal minPrice;
  33. /**
  34. * 商品状态(0正常 1停用)
  35. */
  36. @ApiModelProperty("商品状态(0正常 1停用)")
  37. private Byte status;
  38. /**
  39. * 服务字段
  40. */
  41. @ApiModelProperty("服务字段")
  42. private List<Name> serviceField;
  43. /**
  44. * 成本费用标准
  45. */
  46. @ApiModelProperty("成本费用标准")
  47. private List<NameValue> costField;
  48. /**
  49. * 补充报考字段
  50. */
  51. @ApiModelProperty("补充报考字段")
  52. private List<Value> examinationField;
  53. /**
  54. * 备注
  55. */
  56. @ApiModelProperty("备注")
  57. @Length(max= 255,message="备注长度不能超过255")
  58. private String remark;
  59. }

  1. import com.baomidou.mybatisplus.annotation.TableName;
  2. import io.swagger.annotations.ApiModelProperty;
  3. import lombok.Data;
  4. import lombok.EqualsAndHashCode;
  5. import org.hibernate.validator.constraints.Length;
  6. import java.math.BigDecimal;
  7. import java.util.Date;
  8. /**
  9. * 商品
  10. * @TableName system_shop
  11. */
  12. @TableName("system_shop")
  13. @Data
  14. @EqualsAndHashCode(callSuper = true)
  15. public class ShopDO extends TenantBaseDO {
  16. /**
  17. * 商品ID
  18. */
  19. @ApiModelProperty("商品ID")
  20. private Long id;
  21. /**
  22. * 商品名称
  23. */
  24. @ApiModelProperty("商品名称")
  25. @Length(max= 255,message="编码长度不能超过255")
  26. private String name;
  27. /**
  28. * 商品分类
  29. */
  30. @ApiModelProperty("商品分类")
  31. private Long systemClassificationId;
  32. /**
  33. * 标准价格
  34. */
  35. @ApiModelProperty("标准价格")
  36. private BigDecimal price;
  37. /**
  38. * 最低价格
  39. */
  40. @ApiModelProperty("最低价格")
  41. private BigDecimal minPrice;
  42. /**
  43. * 商品状态(0正常 1停用)
  44. */
  45. @ApiModelProperty("商品状态(0正常 1停用)")
  46. private Byte status;
  47. /**
  48. * 服务字段
  49. */
  50. @ApiModelProperty("服务字段")
  51. private String serviceField;
  52. /**
  53. * 成本费用标准
  54. */
  55. @ApiModelProperty("成本费用标准")
  56. private String costField;
  57. /**
  58. * 补充报考字段
  59. */
  60. @ApiModelProperty("补充报考字段")
  61. private String examinationField;
  62. /**
  63. * 创建者
  64. */
  65. @ApiModelProperty("创建者")
  66. @Length(max= 64,message="编码长度不能超过64")
  67. private String creator;
  68. /**
  69. * 创建时间
  70. */
  71. @ApiModelProperty("创建时间")
  72. private Date createTime;
  73. /**
  74. * 更新者
  75. */
  76. @ApiModelProperty("更新者")
  77. @Length(max= 64,message="编码长度不能超过64")
  78. private String updater;
  79. /**
  80. * 更新时间
  81. */
  82. @ApiModelProperty("更新时间")
  83. private Date updateTime;
  84. /**
  85. * 是否删除
  86. */
  87. @ApiModelProperty("是否删除")
  88. private Boolean deleted;
  89. /**
  90. * 租户编号
  91. */
  92. @ApiModelProperty("租户编号")
  93. private Long tenantId;
  94. /**
  95. * 备注
  96. */
  97. @ApiModelProperty("备注")
  98. @Length(max= 255,message="编码长度不能超过255")
  99. private String remark;
  100. }
  1. import io.swagger.annotations.ApiModel;
  2. import io.swagger.annotations.ApiModelProperty;
  3. import lombok.Data;
  4. import lombok.EqualsAndHashCode;
  5. import javax.validation.constraints.NotNull;
  6. @ApiModel("管理后台 - 商品更新 Request VO")
  7. @Data
  8. @EqualsAndHashCode(callSuper = true)
  9. public class ShopUpdateReqVO extends ShopBaseVO {
  10. @ApiModelProperty(value = "商品编号", required = true, example = "1024")
  11. @NotNull(message = "商品编号不能为空")
  12. private Long id;
  13. }
  1. import io.swagger.annotations.ApiModel;
  2. import lombok.Data;
  3. import lombok.EqualsAndHashCode;
  4. import lombok.ToString;
  5. @ApiModel("管理后台 - 商品创建 Request VO")
  6. @Data
  7. @EqualsAndHashCode(callSuper = true)
  8. @ToString(callSuper = true)
  9. public class ShopCreateReqVO extends ShopBaseVO {
  10. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/479476
推荐阅读
相关标签
  

闽ICP备14008679号