Search code examples
javaspringspring-bootdtomapper

How map List into DTO


I have this problem, this is my DTO:

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

Here my other DTO:

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

But I need map OrderEmbeddedListJsonDTO propertie since OrderDTO for example:

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

This is the class of orderDTOMapped:

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();
        }
    };

And order is a entity:

public class Order implements java.io.Serializable {

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

How can do this? Could you help me please?

Updated:

I was able to fix it with this code:

List<Order> shippableOrders = order.getEmbedded()
                        .getOrder()
                        .stream()
                        .map(this::mapOrderToShippableOrder)
                        .collect(Collectors.toList());
                OrderEmbeddedListJsonDTO ordersList = new OrderEmbeddedListJsonDTO();
                ordersList.setOrder(shippableOrders);
                orderDTOMapped.setEmbedded(ordersList);
                return orderDTOMapped;

I appreciate your help, thanks for
tmarwen


Solution

  • You can iterate over the OrderDTO#embedded items mapping each items to a new instances copying / replacing whatever data you need:

    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;
    }