[英]Cycles in mapping Domain models to DTOs
您能否告诉我,对于具有周期的对象,将dto映射到域并返回的最佳实践是什么? 例如,我有以下两个对象:用户对象:
public class User {
private int id;
private String firstname;
private String lastname;
private List<Order> orders;
// ... some other properties and getters and setters
}
和Order对象:
public class Order {
private int id;
private User owner;
}
我应该如何将这些域模型映射到DTO? 这是我的映射函数的示例:
public UserDTO userToDto(User user) {
UserDTO dto = new UserDTO();
dto.setIs(user.getId());
dto.setFirstname(user.getFirsname());
dto.setLastname(user.getLastname());
List<OrderDTO> ordersDto = new List<OrderDTO>();
for (Order order : user.getOrders()) {
OrderDTO orderDto = new OrderDTO();
orderDto.setId(order.getId());
orderDto.setUser(...) // what I should I set here?
ordersDto.add(orderDto);
}
dto.setOrders(ordersDto);
return dto;
}
我对orderDto.setUser(...)函数有问题。 你能告诉我什么是最佳实践吗? 当我开始逐步映射User的属性时,我以实际映射的Orders结束,并创建周期。 感谢您的回答。
首先,我假设您也需要客户端上的关系。 否则,无论如何您都不会遇到周期问题。 此外,我假设您同时具有UserDTO和OrderDTO,其中OrderDTO具有UserDTO作为成员(并且UserDTO是OrderDTO的列表)。
恕我直言,您只需设置
orderDTO.setUser(dto); // where dto is the UserDTO created initially.
现在,您将获得一个周期,在将DTO发送到客户端时(例如,使用Rest),需要处理该周期。 在JPA方面,您可能具有@OneToOne(按顺序)和@OneToMany(按用户)注释。
我建议杰克逊进行JSON处理。 如果这样做,您可以使用
// in UserDTO
@JsonManagedReference
private List<Orders> orders;
// in OrdersDTO
@JsonBackReference
private UserDTO owner;
我希望这有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.