使用 MapStruct 中的最终成员映射 DTO

Mapping DTO with final members in MapStruct

有没有办法使用 MatStruct 映射 DTO,它也有一些最终数据成员并且不能有默认构造函数,例如:

public class TestDto {

    private final String testName;
    private int id;
    private String testCase;

    public TestDto(String testName) {
        this.testName = testName;
    }

    public String getTestName() {
        return testName;
    }

    public int getId() {
        return id;
    }

    public String getTestCase() {
        return testCase;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setTestCase(String testCase) {
        this.testCase = testCase;
    }
}

请建议如何使用 MapStruct 映射此 DTO。

您可以使用 @ObjectFactory 构建您的 DTO 实例。

例如:

@Mapper
public interface MyMapper {

    @ObjectFactory
    default TestDto create() {
        return new TestDto("My Test Name");
    }

    //the rest of the mappings
}

您还可以增强 @ObjectFactory 以接受可用于构建 TestDto 的源参数。您甚至可以使用 @Context 作为对象工厂。

注意:您不必将 @ObjectFactory 方法放在同一个 Mapper 中,甚至不必放在 MapStruct @Mapper 中。您可以将它放在任何 class 中(或使其成为静态的)然后 @Mapper(uses = MyFactory.class)