java是否可以从列表的特定元素映射到self?
鉴于以下类别:
public class Person {
private String name;
private List<Role> roles;
public String getRoleByType(String type){
for(Role role : roles){
if(type.equals(role.getType())){
return role;
}
}
return null;
}
}
public interface Role {
public String getType();
}
public class Driver extends Role {
private String driverLicenseNr;
public String getType(){
return "Driver";
}
}
public class Professional extends Role {
private String occupation;
public String getType(){
return "Professional";
}
}
public class DriverDTO {
private String name;
private String driverLicenseNr;
}
我试图完成的是将人映射到DriverDTO
我试着这样做:
@Mapper
public abstract class DriverMapper {
@Mapping(target = ".", expression = "java(driver.getRoleByType(\"Driver\"))")
public abstract DriverDTO convert(Person person);
public abstract void driverToDriverDTO(Driver driver, @MappingTarget DriverDTO driverDto);
}
但是注释处理器不能简单地用它生成代码。抛出nullPointerException。 如果我改为这样做(为了简化而隐藏一些编程细节):
@Mapper
public abstract class DriverMapper {
@Mapping(target = "driverLicenseNr", expression = "java(driver.getRoleByType(\"Driver\").getDriverLicenseNr())")
public abstract DriverDTO convert(Person person);
}
它可以工作,但我想利用自动映射,在本例中我不会这样做。似乎target="."
只适用于使用源中单个对象的简单映射。这是真的还是我选择了错误的道路来解决这个问题
# 1 楼答案
使用表达式时,MapStruct不进行任何计算,而是使用生成的代码中的内容
我建议你做如下事情: