不带源参数的 MapStruct @Mapping

Pie*_*nes 2 java mapstruct

我需要将 a 转换dtoentity,并且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)

Ans*_*rma 6

您可以尝试在映射中使用表达式字段,如下所示(另一种无需源参数即可执行此操作的方法)

@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)