微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决DTO的modelMapper错误?

如何解决如何解决DTO的modelMapper错误?

我正在使用modelmapper,但有一个问题,就是DTO没有映射。

modelmapper mapping errors:

1) Error mapping domain.Order to domain.dto.order.OrderResponseInfo

1 error
org.modelmapper.MappingException: modelmapper mapping errors:

1) Error mapping domain.Order to dto.order.OrderResponseInfo

1 error
    at org.modelmapper.internal.Errors.throwMappingExceptionIfErrorsExist(Errors.java:374)
    at org.modelmapper.internal.MappingEngineImpl.map(MappingEngineImpl.java:69)
    at org.modelmapper.modelmapper.mapInternal(modelmapper.java:497)
    at org.modelmapper.modelmapper.map(modelmapper.java:340)
    at net.class101.homework.service.OrderService.orders(OrderService.java:74)

OrderService

    @Transactional  // it's okay
    public OrderResponseInfo order(OrderRequestInfo dto) {

        Product product = productRepository.findOneByNaturalKey(dto.getProduct().getNaturalKey())
                .orElseThrow(NotExistProductException::new);

        OrderProduct orderProduct = OrderProduct.createOrderProduct(product,product.getPrice(),dto.getCount());

        Order order = Order.createOrder(orderProduct);
        orderRepository.save(order);

        return modelmapper.map(order,OrderResponseInfo.class);
    }

    @Transactional // it's modelmapperError
    public OrderResponseInfo orders(List<OrderRequestInfo> orderRequests) {

        List<OrderProduct> orderProducts = new ArrayList<>();

        for(OrderRequestInfo order : orderRequests){
            orderProducts.add(OrderProduct.createOrderProduct(order.getProduct(),order.getorderPrice(),order.getCount()));
        }

        Order order = Order.createOrder(orderProducts.toArray(new OrderProduct[0]));
        orderRepository.save(order);

        return modelmapper.map(order,OrderResponseInfo.class);
    }

DTO


@Getter
@Setter
@NoArgsConstructor
public class OrderResponseInfo {

    private Long id;
    private Order order;
    private BigDecimal totalOrderPrice;
    private BigDecimal shippingCharge;
    private BigDecimal requirePaymentPrice;
    private List<OrderProduct> orderProducts;

    public OrderResponseInfo(Long id,Order order) {
        this.id = id;
        this.order = order;
        this.totalOrderPrice = order.getTotalPrice();
        this.shippingCharge = order.getShippingCharge();
        this.requirePaymentPrice = order.getRequirePaymentPrice();
        this.orderProducts = order.getorderProducts();
    }
}

OrderOrderProduct之间存在“一对多”的关系,我们认为一个订单可以有多个OrderProducts

当我现在测试一个订单时,modelmapper正常工作。

但是,modelmapper处理多个订单时出错,但是我不确定为什么。

单个订单(OrderService.order())和多个订单(OrderService.orders())之间的唯一区别是因素和通过for循环产生的OrderProduct间的区别。 / p>

已编辑

使用return modelmapper.map (order,orderResponseInfo.class);代替return new OrderResponseInfo(order.getId(),order);来确认映射正常工作。

为什么会这样?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。