Java MapStruct@Mapping不带源参数
我需要将Java MapStruct@Mapping不带源参数,java,mapstruct,Java,Mapstruct,我需要将dto转换为实体,而实体有一个字段要填充,它不需要dto的任何字段。实际上,@Mapping注释没有任何源代码 让我们用这个简单的例子来说明: public class Employee { private String firstName; private String customId; } public class EmployeeDto { private String firstName; } 正如您所能看到的,Employee实体的customId
dto
转换为实体
,而实体
有一个字段要填充,它不需要dto
的任何字段。实际上,@Mapping
注释没有任何源代码
让我们用这个简单的例子来说明:
public class Employee {
private String firstName;
private String customId;
}
public class EmployeeDto {
private String firstName;
}
正如您所能看到的,Employee
实体的customId
字段在EmployeeDTO
中不存在
此外,我还有以下格式化程序
。显然,我创建了一个@CustomIdGenerator
@interface
public class EmployeeFormatter {
@CustomIdGenerator
public static String simulationIdGenerator() {
return // businessLogic
}
}
最后,我的地图绘制程序如下所示:
@Mapper(uses = EmployeeFormatter.class)
public abstract class EmployeeMapper {
@Mapping(target = "customId", qualifiedBy = customIdGenerator.class)
public abstract Employee toEmployee(EmployeeDTO dto);
}
但在生成的类中,它不起作用。您知道是否有任何方法可以使用不带参数的映射器吗
谢谢你的帮助;)
编辑:
根据@Nikolai Shevchenko的回复,以下代码有效:
@AfterMapping
void setCustomId(@MappingTarget Employee employee) {
employee.setCustomId(EmployeeFormatter.customIdGenerator());
}
@Mapper
公共抽象类EmployeeMapper{
@映射
公开摘要雇员对雇员(雇员对dto);
@后映射
无效mapCustomId(员工来源,@MappingTarget EmployeeDTO dto){
dto.setCustomId(EmployeeFormatter.simulationIdGenerator())
}
}
@Mapper
公共抽象类EmployeeMapper{
@映射
公开摘要雇员对雇员(雇员对dto);
@后映射
无效mapCustomId(员工来源,@MappingTarget EmployeeDTO dto){
dto.setCustomId(EmployeeFormatter.simulationIdGenerator())
}
}
您可以像这样尝试在映射中使用表达式字段(另一种不使用源参数的方法)
您可以像这样尝试在映射中使用expression字段(另一种不使用source param的方法)
伟大的感谢您的回复,但根据您的回复,可以用简单的方式完成。检查我的帖子编辑;)伟大的感谢您的回复,但根据您的回复,可以用简单的方式完成。检查我的帖子编辑;)
@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();
}
}