映射嵌套对象(java)

时间:2016-08-05 15:34:49

标签: java mapping dto

我有一些嵌套对象。我们称他们为A,B和C.

public class A  {
    private String name;
    private String desc;
    //......{some other fields}
    private List<B> bList;
}

public class B  {
    private String name;
    private String desc;
    //......{some other fields}
    private List<C> cList;
}


public class C  {
    private String name;
    private String desc;
    ......{some other fields}
}

现在我想只映射这些对象的一些属性。让我们说我只需要来自A的B的名称和列表,只需要来自B的C列表和仅来自C的desc。 所以我创建了DTO对象。

public class ADTO{
    private String name;
    List<BDTO> bList;
}

public class BDTO{
    List<CDTO> cList;
}

public class CDTO{
    private String desc;
}

我会手动将A映射到ADTO,B映射到BDTO,C映射到CDTO,代码类似于:

private ADTO map(A a)
     ADTO adto = new ADTO();
     List<BDTO> bDTOList = new ArrayList<>();
     adto.setName(a.getName());
     for (B b : a.getBlist()){
        BDTO bdto = new BDTO();
        bdto.setCList = map(b.getCList());
        bDTOList.add(bdto);
    }
    adto.setBList(bDTOList);
    return adto;
}
private List<CDTO> map(List<C>){
........ANOTHER BORING MAPPING
}

有没有更简单的方法(可能有一些设计模式)来实现这样的任务?想象一下,如果我们有更大的类或更多的对象来映射更深的嵌套会发生什么。编写这些代码只是为了显示/隐藏某些字段。 附:我需要写至少3个不同的观点&#34;这样的对象和#34;观点的数量&#34;可以在未来增加。所以我正在寻找解决方案来添加新的&#34;视图&#34;将来更容易。

1 个答案:

答案 0 :(得分:0)

尝试使用此开源项目Dozer来定位此问题并使其更容易。