将DTO映射到MapStruct中的最终成员

时间:2017-12-06 10:18:36

标签: intellij-idea java-8 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。

1 个答案:

答案 0 :(得分:1)

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

例如:

@Mapper
public interface MyMapper {

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

    //the rest of the mappings
}

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

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