使用 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 method从 Source
对象到合并值,然后将合并字段的源声明为整个源对象:
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/