java - Mapstruct:如何将两个字段合并为一个

标签 java mapping mapstruct

使用 MapStruct 框架,如何将多个字段映射到单个字段(基于自定义逻辑),同时仍将其他字段一对一映射?

这是一个简单的例子来说明我的意思:

public class Source {
    private String firstname;               
    private String surname;  
    // other fields eg:
    private String address; 
    private int age;
    private int favoriteNumber;
}
public class Target {
    private String fullname; // Sould be firstname + surname
    // other fields eg:
    private String address; 
    private int age;
    private int favoriteNumber;
}

我知道可以使用表达式:

@Mapping(target = "fullname", expression = "java(el.getFirstname() + el.getSurname())")

但在我的特殊用例中(本示例中未描述),我需要使用一些外部库来合并/映射两个字段,这对于表达式来说是不可行的。

有没有办法实现不使用表达式合并两个字段?

最佳答案

一种方法是添加 custom mapping methodSource 对象到合并值,然后将合并字段的源声明为整个源对象:

interface CustomMappingMethodMapper {
    @Mapping(target = "fullname", source = ".")
    Target map(Source source);

    default String getFullName(Source s) {
        return s.getFirstname() + " " + s.getSurname();
    }
}

关于java - Mapstruct:如何将两个字段合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60335942/

相关文章:

java - 运行测试时找不到 Pax Exam Option 类的类

java - 如何使@RolesAllowed注释对我的Web应用程序有效?

java - 如何在通过 Java 代码读取 .csv 文件时处理日期时间列

javascript - 嵌套数组映射

Java 和 MapStruct

java - 映射结构 : Nested Iterable to Non-Iterable mapping?

windows - "Android Create"在 Windows 7 中调用失败 - 缺少 JDK

c# - 如何将C#对象映射到SQLite数据库表?

mapping - Vim <CR> 映射不起作用?

java - Mapsruct 类和 @Service 类没有 @Autowired