带你读《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

 

相关文章
|
Apache 数据中心 微服务
构建可扩展的消息系统:Apache Pulsar和NATS的比较
消息系统在现代分布式应用程序中扮演着至关重要的角色,它们用于实现异步通信、事件驱动架构和可靠数据传输。在本篇文章中,我们将探讨两个流行的消息系统:Apache Pulsar和NATS,并比较它们的特点、性能和可扩展性。我们将研究它们的架构、部署方式以及如何使用它们来构建可靠和高性能的消息传递系统。
1076 0
|
存储 安全 Java
【Linux】安装Tomcat以yum方式安装
启动tomcat并设置开机自启
873 0
【Linux】安装Tomcat以yum方式安装
|
人工智能 自然语言处理 IDE
如何让 AI 成为你的编程搭档?一次真实重构告诉你答案
Cursor是一款面向开发者的智能代码编辑器,基于VS Code深度集成AI模型,支持自然语言编写代码、解释逻辑、重构和Bug查找。它提供Agent、Ask、Manual三种模式,具备模块级开发能力,能跨文件操作并主动学习代码库。但其效果依赖模型能力,对复杂跨应用任务仍有限。
如何让 AI 成为你的编程搭档?一次真实重构告诉你答案
|
人工智能 自然语言处理 安全
Claude 4 隆重登场!claude 4国内怎么使用才正确?一分钟学会!
Anthropic 日前正式推出其新一代旗舰模型
1248 4
|
Java 网络安全 开发工具
【Azure 事件中心】Event Hub 无法连接,出现 Did not observe any item or terminal signal within 60000ms in 'flatMapMany' 的错误消息
【Azure 事件中心】Event Hub 无法连接,出现 Did not observe any item or terminal signal within 60000ms in 'flatMapMany' 的错误消息
756 1
|
存储 前端开发 API
HarmonyOSNext 端云一体化(5)
本文介绍了 HarmonyOS Next 中客户端操作云存储的详细方法,涵盖云存储基础、环境准备及核心 API 使用。首先讲解了云存储的概念、免费配额与计费策略,接着说明如何在 AGC 平台开通云存储并初始化实例。核心功能包括文件上传(`uploadFile`)、云端文件列表查看(`list`)、元数据获取(`getMetadata`)、下载地址获取(`getDownloadURL`)、文件下载(`downloadFile`)和文件删除(`deleteFile`)。文中还强调了操作时需注意的事项,如文件路径限制和错误处理。通过学习,开发者可掌握云存储的基本操作,满足应用开发中的文件存储需求。
559 9
HarmonyOSNext 端云一体化(5)
|
人工智能 NoSQL 机器人
【C++】VS code如何配置使用C++(手把手教学)
【C++】VS code如何配置使用C++(手把手教学)
|
缓存 前端开发 Java
在Java项目中实现跨域资源共享(CORS)
在Java项目中实现跨域资源共享(CORS)
|
Java Spring
Spring Boot Admin 自定义健康检查
Spring Boot Admin 自定义健康检查
329 0