1

我的目标是将实体映射到 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;
}

事实上,我想映射catcatDTO. 对于简单的映射,它可以工作。与此类似的示例:

 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>,但我不知道如何解决它。

4

0 回答 0