[英]Complex Java bean mapping
我需要找到一种将实体映射到DTO的解决方案。
我知道有很多库可供使用,但是我需要做的转换非常复杂,而且我还没有找到令人满意的解决方案。
我拥有的实体如下所示:
public class Source {
private String name;
private String desc;
private Set<Details> details = new HashSet<Details>();
}
public class Details {
private String code;
private String type;
private Set<Attribute> attributes = new HashSet<Attribute>();
}
public class Attribute {
private String name;
private String value;
}
为了清楚起见,我删除了持久性注释和getter / setter,并省略了一些字段。
和DTO:
public class DestDTO {
private String name;
private String desc;
private List<GenericDetailsDTO> genericDetails;
}
public class GenericDetailsDTO {
private String code;
private List<DetailsDTO> details;
}
public class DetailsDTO {
private String type;
private String field1;
private Boolean field2;
private Integer field3;
}
我想做的映射如下:
我尝试了JMapper,但无法实现这种解决方案。
我已经能够通过使用Dozer来做到这一点,但是由于它的性能较慢,我想避免使用该库(根据网上的各种文章,例如http://www.christianschenk.org/blog/java-bean-mapper -performance-tests / )。
在理想的情况下,我还想尽可能多地使用批注/ api配置并避免使用XML配置。 而且,如果还可以通过Spring API(再次不是XML)将mapper实例作为bean注入,那将真的是一个美好的世界。
所以我的问题是:您对此有何建议或可以向我推荐一个图书馆以解决此问题?
谢谢你的帮助。
PS:很抱歉,如果不是很清楚,但是很难用几句话来解释。 请不要犹豫,要求更多解释。
我不太清楚您的意思,但我尝试使用JMapper为您提供解决方案。
源字段:
@JMap private String name;
@JMap private String desc;
@JMap("genericDetails")
private Set<Details> details = new HashSet<Details>();
详细信息字段:
@JMap private String code;
@JMap("details")
private String type;
@JMap("details")
private Set<Attribute> attributes = new HashSet<Attribute>();
@JMapConversion(from="type",to="details",type=Type.STATIC)
public static List<DetailsDTO> typeMap(List<DetailsDTO> destination, String sourceType){
for (DetailsDTO detailsDTO : destination)
detailsDTO.setType(sourceType);
return destination;
}
@JMapConversion(from="attributes",to="details",type=Type.STATIC)
public static List<DetailsDTO> detailsMap(List<DetailsDTO> destination, Set<Attribute> attributes){
// ??
return destination;
}
哪里“?” 是因为我不了解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.