java - ModelMapper 将 List<...> 映射到对象属性
问题描述
我正在努力将 List 映射到 responseDTO.getList()
我的代码:
消息DTO
@Getter
@Setter
public Class MessageDTO() {
private String message;
...
}
消息DTO
@Getter
@Setter
public Class MessagesDTO() {
private List<> message;
}
我的转换器
public class MyConverter extends AbstractConverter<List<MessageDTO>, MessagesDTO> {
@Override
protected ChatMessagesResponseDTO convert(List<MessageDTO> source) {
MessagesDTO destination = new MessagesDTO();
destination.setMessages(source);
return destination;
}
}
控制器
...
List<MessageDTO> messages = ... // result of service and succesfull mapping entity to dto
ModelMapper mm = new ModelMapper();
Converter conv = new MyConverter();
mm.addConverter(conv);
MessagesDTO messagesDTO = mm.map(messages, MessagesDTO.class)
return messagesDTO; // always null
任何想法为什么它不起作用?即使使用自定义 TypeMap(s) 和 Converter(s),我也可以在项目的许多其他地方成功使用 modelmapper,但找不到如何将某种类型的列表映射到该类型列表的 DTO 属性的方法。
解决方案
这是因为类型擦除。ModelMapper无法识别 a 的泛型类型,List
因此不应用您的转换器。我不确定是否可以通过您提供的课程来实现,但如果可以的话,这可能是一项相当复杂的任务。
一种解决方案是声明具有存储运行时类型的类。就像:
@SuppressWarnings("serial")
public static class MessageDTOList extends ArrayList<MessageDTO> {};
并对您的转换器进行必要的更改,以便:
public class MyConverter extends AbstractConverter<MessageDTOList, MessagesDTO> {
@Override
protected MessagesDTO convert(MessageDTOList source) {
MessagesDTO destination = new MessagesDTO();
destination.setMessages(source);
return destination;
}
}
如果很难直接获得响应,MessageDTOList
您可以随时:
List<MessageDTO> messages = ... // result of service and succesfull mapping entity
MessageDTOList messagesDerived = new MessageDTOList();
messagesDerived.addAll(messages);
然后只是:
MessagesDTO messagesDTO = mm.map(messagesDerived, MessagesDTO.class);
推荐阅读
- d3.js - 如何根据德语区域设置时间轴标签(刻度)
- django - 如何在Django中的同一模型属性下存储多个文件?
- python - 为什么我的代码在复制文件扩展名时不起作用
- amazon-web-services - 如何在骆驼的休息组件中执行from语句?
- r - 如何解决 R 中具有最小化问题的简单线性方程组?
- c++ - 用单花括号而不是双花括号初始化 std::vector 替换
- php - 如何检查我的哈希密码是否以正确的方式存储在数据库中?
- xaml - CollectionView.Footer 在运行时隐藏/删除 Xamarin 表单
- javascript - 如何在网页中显示对象变量?
- c# - .NET 3.1 中的 ObjectDisposedException / SocketsHttpHandler