我的问题是如何将对象包含嵌套对象映射到DTO,而不是来自嵌套对象的值,例如,如果有2个这样的类:
public class TestClass {
@Id
private String id;
@Field("field1")
private String field1;
@Field("field2")
private Long field2;
@Field("nestedClass")
private NestedClass;
//getter & setter
}
public class NestedClass {
//fields and getter and setter for it
}
DTO classes looks like :
public class TestClassDTO {
private String id;
private String field1;
private Long field2;
private NestedClassDTO ;
//getter & setter
}
public class NestedClassDTO {
//fields and getter and setter for it
}
@Mapper(componentModel = "spring", uses = {})
public interface TestClassMapper {
TestClassDTO TestClassToTestClassDTO(TestClass TestClass);
TestClass TestClassDTOToTestClass(TestClassDTO TestClassDTO);
NestedClass NestedClassDTOToNestedClass(NestedClassDTO NestedClassDTO);
NestedClassDTO NestedClassToNestedClassDTO(NestedClass NestedClass);
}
在调用TestClassDTOToTestClass()并发送TestClassDTO包含NestedClassDTO ..它返回TestClass并使用null NestedClass ..是否可以映射它而无需编写我自己的映射器?
SH
答案 0 :(得分:1)
我找到了它:)
映射器类应该使用如下的嵌套类:
@Mapper(componentModel = "spring", uses = {NestedClassMapper.class})
public interface TestClassMapper {
TestClassDTO TestClassToTestClassDTO(TestClass TestClass);
TestClass TestClassDTOToTestClass(TestClassDTO TestClassDTO);
NestedClass NestedClassDTOToNestedClass(NestedClassDTO NestedClassDTO);
NestedClassDTO NestedClassToNestedClassDTO(NestedClass NestedClass);
}
答案 1 :(得分:0)
不是这样的:
生成getter和setter时TestClassDTO
获取NestedClassDTO
或者如果你需要一个包装类更好看一下:( GENERICS ) 这是实现 Wrapper DTO
的最佳和最商业化的设计public class Value <T>
{
private T innerValue ;
public Value ( T _value )
{
innerValue = _value ;
}
public T read ()
{
return innerValue ;
}
}
答案 2 :(得分:0)
如果我理解正确,您希望有一种映射方法不会映射(忽略)Server=localhost;Port=3306;Database=testing;Uid='test';Pwd='test';AllowUserVariables=True;
中的nestedClass
字段。您可以使用@Mapping#ignore
。
您的映射器看起来像:
TestClassDTO
如果出于某种原因,您希望将值明确设置为@Mapper(componentModel = "spring", uses = {})
public interface TestClassMapper {
TestClassDTO TestClassToTestClassDTO(TestClass TestClass);
@Mapping(target = "nestedClass", ignore = true)
TestClass TestClassDTOToTestClass(TestClassDTO TestClassDTO);
NestedClass NestedClassDTOToNestedClass(NestedClassDTO NestedClassDTO);
NestedClassDTO NestedClassToNestedClassDTO(NestedClass NestedClass);
}
,那么请查看this question的答案