Мы отображаем объект, у которого есть список объектов, которые все реализуют родительский интерфейс, но могут иметь другую реализацию.Но кажется, что когда мы отображаем список, было отображено только значение из ParentClass, а не значение из дочернего элемента.Но составление карт непосредственно по работе детей.
public class ParentClass{
String name;
int anotherParentField;
List<ParentClass> relation;
}
public class ChildClass1 extends ParentClass{
String customCLass1Field;
}
public class ChildClass2 extends ParentClass {
int intField;
}
public class ParentClassDto{
String name;
int anotherParentField;
List<ParentClassDto> relation;
}
public class ChildClass1Dto extends ParentClassDto{
String customCLass1Field;
}
public class ChildClass2Dto extends ParentClassDto {
int intField;
}
Мапперы
@Mapper
public interface ParentClassMapper{
ParentClassDto convertToDto(ParentClass p);
ParentClass convertDTOToModel(ParentClassDto dto);
}
@Mapper
public interface ChildClass1Mapper implements ParentClassMapper
{
ChildClass1Dto convertToDto(ChildClass1 p);
ChildClass1 convertDTOToModel(ChildClass1Dto dto);
}
@Mapper
public interface ChildClass2Mapper implements ParentClassMapper
{
ChildClass2Dto convertToDto(ChildClass2 p);
ChildClass2 convertDTOToModel(ChildClass2Dto dto);
}
Когда с этим мы сопоставляем объект ChildClass1, содержащий ChildClass2 и ChildClass1 в списке, мы получаем.
объект для сопоставления:объект ChildClass1 будет выглядеть следующим образом в формате json:
{
"name":"myName",
"anotherParentField":"10",
"customCLass1Field":"custom name",
"relation":[
{
(This is of Object Type : ChildClass1)
"name":"firstRelationName",
"anotherParentField":"110",
"customCLass1Field":"relationcustom name"
},
{
(This is of Object Type : ChildClass2)
"name":"secondRelationName",
"anotherParentField":"110",
"intField":"4"
}
]
}
Но когда мы используем маппер выше для сопоставления с dto, мы получаем:
{
"name":"myName",
"anotherParentField":"10",
"customCLass1Field":"custom name",
"relation":[
{
"name":"firstRelationName",
"anotherParentField":"110",
},
{
"name":"secondRelationName",
"anotherParentField":"110",
}
]
}
Нет поля из дочернего классасопоставлены.Чего не хватает?