我的目标是将实体映射到 dto 对象。假设我们有这些类:
class GenericPaging<T> {
private List<T> list;
}
class Cat{
private int id;
private String name;
private Cat parent;
}
class CatDTO{
private int id;
private String name;
private int parentId;
}
事实上,我想映射cat
到catDTO
. 对于简单的映射,它可以工作。与此类似的示例:
catDTO = modelmapper.map(cat,CatDTO.class);
但对于复杂的对象,它不起作用。例如:
Cat cat1 = new Cat(1, "Cat1", null);
Cat cat2 = new Cat(2, "Cat2", cat1);
Cat cat3 = new Cat(3, "Cat3", cat1);
List<Cat> cats = Arrays.asList(cat1, cat2, cat3);
GenericPaging<Cat> pagingCat = new GenericPaging();
pagingCat.setList(cats);
现在对于映射,我使用了这个命令:
modelMapper.addMappings(new PropertyMap<Cat, CatDTO>() {
@Override
protected void configure() {
map().setParentId(source.getParent().getId());
}
});
pagingCatDTO=modelMapper.map(pagingCat,new TypeToken<GenericPaging<CatDTO>>(){}.getType());
当我想parentId
在 dto 对象中查看时,它会引发异常。
for(CatDTO cDTO:pagingCatDTO.getList()){
System.out.println(cDTO.getParentId());
}
这是抛出的异常:
java.lang.ClassCastException:Test.modelmapper.Cat 无法转换为 Test.modelmapper.CatDTO
如果为每个对象(cat、catDTO)使用单独的类,它可以正常工作。像这样:
class PagingCat{
private List<Cat> list;
}
class PagingCatDTO{
private List<CatDTO> list;
}
我认为问题是由泛型类引起的。即GenericPaging<T>
,但我不知道如何解决它。