繁体   English   中英

如何将 List 映射到 DTO

[英]How map List into DTO

我有这个问题,这是我的 DTO:

public class OrderDTO {
    private Long id;
    @JsonProperty("_embedded")
    private OrderEmbeddedListJsonDTO embedded;
}

这是我的另一个 DTO:

public class OrderEmbeddedListJsonDTO {
    private List<Order> order;
}

但我需要地图 OrderEmbeddedListJsonDTO 属性,因为 OrderDTO 例如:

orderDTOMapped.setEmbedded(order.getEmbedded(HERE NEED: setStartAddress("new value")));

这是 orderDTOMaped 的类:

public OrderWithAddressDTO orderToOrderDTO(OrderDTO order) throws OrderGetException {
        try {
                OrderWithAddressDTO orderDTOMapped = new OrderWithAddressDTO();
                orderDTOMapped.setId(order.getId());
                orderDTOMapped.setEmbedded(order.getEmbedded());
            return orderDTOMapped;
        }  catch (Exception e) {
            throw new OrderGetException();
        }
    };

而订单是一个实体:

public class Order implements java.io.Serializable {

    private Long id;
    private Double latitude;
    private Double longitude;
    @JsonProperty("_embedded")
    private OrderEmbeddedListJsonDTO embedded;
}

怎么能做到这一点? 请问你能帮帮我吗?

您可以遍历OrderDTO#embedded项目,将每个项目映射到一个新实例,复制/替换您需要的任何数据:

public OrderWithAddressDTO orderToOrderDTO(OrderDTO order) throws OrderGetException {
    try {
        OrderWithAddressDTO orderDTOMapped = new OrderWithAddressDTO();
        orderDTOMapped.setId(order.getId());
        List<Order> shippableOrders = order.getEmbedded()
                .getOrder()
                .stream()
                .map(this::mapOrderToShippableOrder)
                 .collect(Collectors.toList());
        OrderEmbeddedListJsonDTO ordersList = new OrderEmbeddedListJsonDTO();
        ordersList.setEmbedded(ordersList);
        return orderDTOMapped;
    }  catch (Exception e) {
        throw new OrderGetException();
    }
};

private Order mapOrderToShippableOrder(Order order) {
    Order result = new Order();
    // map fields from `order` to `result` order including `new-address`
    return result;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM