带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(5)

简介: 带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(5)

带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(4)https://developer.aliyun.com/article/1339760?groupCode=taobaotech

image.png多个字段转换为一个字段


常用于将多个字段转为JSON字段,在以下示例中,为了避免引入第三方包(如FastJson),仅使用字符串拼接两  个字段,Json方式同理。

@Mapper
public abstract class Converter {
public static Converter INSTANT = Mappers.getMapper(Converter.class);
@Mapping(target = "extra", source = "vo", qualifiedByName = "convertToExtra") public abstract DTO convert(VO vo);
@Named("convertToExtra")
public String convertToExtra(VO vo) {
return String.format("%s,%s", vo.getAge(), vo.getUserNick());
}

 

 

将多个字段转换为一个字段,需要以下几个步骤:

 

  1. 创建自定义转换方法(本例为convertToExtra()):

方法入参类型为被转换的类(本例为VO),出参为转换好的字段(本例为extra);

为方法加上@Named注解,并自定义该方法在mapStruct中的名字(本例中为convertToExtra)。

  1. 在转换方法上增加Mapping注解,其中:              source字段必须与转换方法入参名字相同(本例中均为vo); target 字 段 为 目 标 字 段 ( 本 例 中 为 extra); qualifiedByName字段为上述自定义的方法名字。

 

image.png将一个字段转换为多个字段

该方法常用于从JSON字段中取出数据。

原理与上述方法类似,定义两个自定义转换方法,用于转换extra字段。

 

@Mapper
public abstract class Converter {
public static Converter INSTANT = Mappers.getMapper(Converter.class);
@Mapping(target = "age", source = "extra", qualifiedByName = "extractAge") @Mapping(target = "userNick", source = "extra", qualifiedByName = "extractUserNick") public abstract VO convertToVO(DTO dto);
@Named("extractAge")
public Long extractAge(String extra) {
// 从extra中提取第一个值
return Long.valueOf(extra.split(",")[0]);
}
@Named("extractUserNick")
public String extractUserNick(String extra) {
// 从extra中提取第二个值return extra.split(",")[1];
}

 

 

 

image.png使用示例

 

final VO vo = VO.builder()
.id(1L)
.age(18L)
.userNick("Nick")
.build();
// 转为DTO
final DTO dto = Converter.INSTANT.convertToDTO(vo); System.out.println(dto);
// 转回VO
final VO newVo = Converter.INSTANT.convertToVO(dto); System.out.println(newVo);

 

输出:

1 DTO(id=1, extra=18,Nick)
2 VO(id=1, age=18, userNick=18)

 

带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(6)https://developer.aliyun.com/article/1339758?groupCode=taobaotech

 

相关文章
|
自然语言处理 分布式计算 Java
基于OpenSearch向量检索版和智能问答版搭建企业专属对话搜索系统
本文将介绍如何使用OpenSearch向量检索版和智能问答版,搭建灵活自定义的企业专属对话搜索系统。
2214 1
|
5月前
|
人工智能 自然语言处理 IDE
如何让 AI 成为你的编程搭档?一次真实重构告诉你答案
Cursor是一款面向开发者的智能代码编辑器,基于VS Code深度集成AI模型,支持自然语言编写代码、解释逻辑、重构和Bug查找。它提供Agent、Ask、Manual三种模式,具备模块级开发能力,能跨文件操作并主动学习代码库。但其效果依赖模型能力,对复杂跨应用任务仍有限。
如何让 AI 成为你的编程搭档?一次真实重构告诉你答案
|
6月前
|
人工智能 自然语言处理 安全
Claude 4 隆重登场!claude 4国内怎么使用才正确?一分钟学会!
Anthropic 日前正式推出其新一代旗舰模型
573 4
|
3月前
|
前端开发 NoSQL 关系型数据库
如何开发研发项目管理中的需求管理板块?(附架构图+流程图+代码参考)
本文探讨了中小企业在研发或产品工作中常见的需求管理问题,如需求记录混乱、交付靠口头约定、变更无追踪等。通过系统化的需求管理,可实现“谁在做什么、为什么做、何时完成、谁验收”的可视化与责任归属,减少沟通成本,提升效率。文章详细介绍了需求管理的核心功能模块(如需求看板、处理流程、研发日报)、系统架构设计、前后端实现参考、开发技巧与落地建议,以及上线后的运营指标与实施路线图。最终目标是将松散的流程规范化、可追踪、可复用,助力企业构建高效的研发项目管理体系。
|
9月前
|
人工智能 搜索推荐 机器人
详解:Grok 3 官网入口_Grok 3国内中文版在线使用
Grok是xAI于2023年11月推出的创新型语言模型,它可不是一般的聊天机器人
|
9月前
|
搜索推荐 小程序 数据安全/隐私保护
【01】支付宝支付商户申请下户到配置完整流程-申请支付宝商户账户-提交资料审核-申请+配置完整流程-优雅草卓伊凡
【01】支付宝支付商户申请下户到配置完整流程-申请支付宝商户账户-提交资料审核-申请+配置完整流程-优雅草卓伊凡
1198 1
【01】支付宝支付商户申请下户到配置完整流程-申请支付宝商户账户-提交资料审核-申请+配置完整流程-优雅草卓伊凡
|
JSON 编解码 Apache
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
211 1
|
前端开发 JavaScript 定位技术
GPS坐标转百度坐标
GPS坐标转百度坐标
277 1
|
JSON 前端开发 数据格式
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(4)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(4)
224 0
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(3)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(3)
181 0