ModelMapper propertyMap со списком объектов на ответDTO

Я новичок в modelMapper, и я столкнулся с проблемой, когда попытался составить список объектов сущности в responseDTO.

Пользователь - Entity 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.

Кто-нибудь может сказать мне, как я могу исправить эту проблему?


person K.vindi    schedule 20.11.2019    source источник


Ответы (1)


Это точно так, как говорится в сообщении об ошибке:

Убедитесь, что у метода нулевые параметры

Это потому, что (ниже выдержка из здесь)

Вы получаете эти ошибки, потому что PropertyMap ограничивает ваши действия внутри configure().

Мне трудно понять, что вы на самом деле пытаетесь сопоставить, потому что кажется, что вы просто хотите сгладить некоторый список Users в DTO, содержащем данные только от одного пользователя, а именно первого в списке (если нет пусто!). Может быть, вы делаете не то, что должны, или, может быть, делаете это неправильно. По крайней мере, кажется, что никаких специальных отображений вам не нужно.

Предполагая, что ваши User и UserResponseDTO будут иметь вид (упрощенный!):

@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);

и если вы хотите отобразить список who, например:

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)
person pirho    schedule 14.12.2019