我需要将 a 转换dto为entity,并且entity有一个要填充的字段,该字段不需要 的任何字段dto。事实上,该@Mapping注释没有任何来源。
让我们用这个简单的例子来说明它:
public class Employee {
private String firstName;
private String customId;
}
public class EmployeeDto {
private String firstName;
}
Run Code Online (Sandbox Code Playgroud)
customId如您所知,实体的字段Employee不存在于EmployeeDTO.
另外,我还有以下内容formatter。显然,我创建了一个@CustomIdGenerator @interface
public class EmployeeFormatter {
@CustomIdGenerator
public static String simulationIdGenerator() {
return // businessLogic
}
}
Run Code Online (Sandbox Code Playgroud)
最后我的映射器看起来像这样:
@Mapper(uses = EmployeeFormatter.class)
public abstract class EmployeeMapper {
@Mapping(target = "customId", qualifiedBy = customIdGenerator.class)
public abstract Employee toEmployee(EmployeeDTO dto);
}
Run Code Online (Sandbox Code Playgroud)
但在生成的类中它不起作用。您知道是否有任何方法可以使用不带参数的映射器?
感谢您的帮助 ;)
编辑 :
根据 @Nikolai Shevchenko 的回复,以下代码有效:
@AfterMapping
void setCustomId(@MappingTarget Employee employee) {
employee.setCustomId(EmployeeFormatter.customIdGenerator());
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试在映射中使用表达式字段,如下所示(另一种无需源参数即可执行此操作的方法)
@Mapper(uses = EmployeeFormatter.class)
public abstract class EmployeeMapper {
@Mapping(target = "customId", expression = "java(getCustomId())")
public abstract Employee toEmployee(EmployeeDTO dto);
public String getCustomId() {
return EmployeeFormatter.customIdGenerator();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2852 次 |
| 最近记录: |