【问题标题】:ModelMapper map List<...> to object propertyModelMapper 将 List<...> 映射到对象属性
【发布时间】:2021-07-28 10:27:48
【问题描述】:

我正在努力将 List 映射到 responseDTO.getList()

我的代码:

MessageDTO

 @Getter
 @Setter
 public Class MessageDTO() {
   private String message;
   ...
 }

MessagesDTO

@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 属性的方法。

【问题讨论】:

    标签: java spring modelmapper


    【解决方案1】:

    这是因为类型擦除。 ModelMapper 无法识别 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);
    

    【讨论】:

      猜你喜欢
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 2017-03-16
      • 2015-08-13
      相关资源
      最近更新 更多