【问题标题】:ModelMapper propertyMap with List of objects to a responseDTO带有对象列表的 ModelMapper propertyMap 到 responseDTO
【发布时间】:2019-11-20 03:19:00
【问题描述】:

我是 modelMapper 的新手,在尝试将实体对象列表添加到 responseDTO 时遇到了问题。

用户 - 实体 UserResponseDTO - 响应 DTO

我为 propertyMap 做了以下配置。

        modelMapper.addMappings(new PropertyMap<List<User>, UserResponseDTO>() {
            @Override
            protected void configure() {
                map().setName(source.get(0).getName());
                map().setEmail(source.get(0).getEmail());
                map().setUserRole(source.get(0).getUserRole());
                map().setLanguage(source.get(0).getLanguage());
                map().setTimeZone(source.get(0).getTimeZone());
                // ....have more mapping ahead
            }
        });

但它给出了以下错误:

org.modelmapper.ConfigurationException:ModelMapper 配置错误:

1) 无效的源方法 java.util.List.get()。确保该方法的参数为零且不返回 void。

2) 无效的源方法 java.util.List.get()。确保该方法的参数为零且不返回 void。

3) 无效的源方法 java.util.List.get()。确保该方法的参数为零且不返回 void。

4) 无效的源方法 java.util.List.get()。确保该方法的参数为零且不返回 void。

5) 无效的源方法 java.util.List.get()。确保该方法的参数为零且不返回 void。

谁能告诉我如何解决这个问题?

【问题讨论】:

    标签: java spring-boot modelmapper


    【解决方案1】:

    正如错误信息所说:

    确保方法的参数为零

    这是因为(以下摘自here

    您收到这些错误是因为 PropertyMap 限制了您在 configure(). 中可以执行的操作

    我发现很难理解您实际尝试映射的内容,因为您似乎只想将 Users 的某些列表展平为包含来自单个用户的数据的 DTO,即列表中的第一个(如果不为空!)。也许你没有做你应该做的,或者你做错了。至少看起来你不需要任何特殊的映射。

    假设您的 UserUserResponseDTO 会像(简化!):

    @Getter @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    public class User {
        private Long id;
        private String name;
        private String email;
    }
    

    @Getter
    @Setter
    public class UserResponseDTO {
        private String name;
        private String email;
    }
    

    那么映射单个用户就像:

    new ModelMapper().map(users.get(0), UserResponseDTO.class);
    

    如果您想映射谁列表,例如:

    new ModelMapper().map(users, UserListResponseDTO.class)
    

    那么您的 UserListResponseDTO 将类似于:

    @SuppressWarnings("serial")
    public class UserListResponseDTO extends ArrayList<UserResponseDTO> {}
    

    或者如果你需要返回一个只有第一个用户的列表:

    new ModelMapper()..map(Arrays.asList(users.get(0)), UserListResponseDTO.class)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-08
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多