使用 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)
有没有办法使用 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)