gpt4 book ai didi

java - 将实体映射到 entityDTO 的 Spring 引导问题

转载 作者:行者123 更新时间:2023-12-01 14:33:48 48 4
gpt4 key购买 nike

我正在使用 spring-boot-1.5.6 和 modelmapper-1.1.0。我想将实体对象映射到 OrderDto但不知道如何通过 modelMapper 来完成。请找到下面的代码

Order.Java

public class Order {
private String orderUid;
private Invoice invoice;
private List<Item> items;

//Getter & setter
}

Item.java

public class Item {
private String itemId;
private String itemName;
private String itemUid;
private String isbn;
//other details of item
//Getter & setter
}

OrderDTO.java

public class OrderDTO {
private String orderUid;
private Invoice invoice;
private String itemId;
private String itemName;
private String itemUid;
private String isbn;
//other details of item

//Getter & setter
}

我想根据我们从客户端(前端)获得的 itemID 返回带有项目的 OrderDTO

public Page<OrderDTO> convertOrderEntityToDTO (Page<Order> orderList,String itemId) {
ModelMapper modelMapper = new ModelMapper();
Type listType = new TypeToken<Page<OrderDTO>>() {}.getType();
modelMapper.addConverter((MappingContext<Order, OrderDTO> context) -> {
Item item = context.getSource().getItems().stream()
.filter(item -> equalsIgnoreCase(item.getItemId,itemId))
.findAny().orElse(null);
if (item != null) {
OrderDTO orderDTO = context.getDestination();
orderDTO.setItemId(item.getItemId());
orderDTO.setItemName(item.getItemName());
orderDTO.setItemUid(item.getItemUid());
orderDTO.setIsbn(item.getIsbn());
return orderDTO;
}
return null;
});

Page<OrderDTO> addonServices = modelMapper.map(orderList, listType);
}

在上面的方法中,converter没有被调用(可能是因为modelMapper的TypePair不正确)和item相关的属性在 OrderDTO 中始终为空。我想根据 ItemId 获取 Item 值。

任何帮助或提示都将不胜感激。任何有或没有 modelMapper 的建议都非常值得赞赏。

最佳答案

据我了解,您使用 org.springframework.dataPage 类或类似的东西。无论如何,这个通用 Page 类包含带有您的数据的通用 List。我会说,这种构造对于 modelMapper 来说“太通用了”。您最好获取您的数据列表,将其转换并创建一个新的 Page

此外

  • 您应该创建一个 typeMap 来注册一个新的转换器

  • 如果您通过 modelMapper.map(..) 提供新的目标对象,
  • context.getDestination() 返回非空值。在您的情况下,您将得到 null

这是我对您的 convertOrderEntityToDTO 方法的看法:

public Page<OrderDTO> convertOrderEntityToDTO(Page<Order> orderList, String itemId) {
ModelMapper modelMapper = new ModelMapper();
modelMapper.createTypeMap(Order.class, OrderDTO.class)
.setConverter(context -> context.getSource().getItems().stream()
.filter(o -> equalsIgnoreCase(o.getItemId(), itemId))
.findAny().map(o -> {
OrderDTO orderDTO = new OrderDTO();
orderDTO.setItemId(o.getItemId());
orderDTO.setItemName(o.getItemName());
orderDTO.setItemUid(o.getItemUid());
orderDTO.setIsbn(o.getIsbn());
return orderDTO;
}).orElse(null));

List<OrderDTO> orderDtoList = orderList.getContent().stream()
.map(o -> modelMapper.map(o, OrderDTO.class))
.collect(Collectors.toList());

return new PageImpl<>(orderDtoList, orderList.getPageable(), orderList.getTotalElements());
}

关于java - 将实体映射到 entityDTO 的 Spring 引导问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52500145/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com