Как применить список в одном поле с помощью MapStruct?

У меня есть этот POJO:

public class PlayerDto {

    private Long id;
    private String name;
    private String past;

}

И у меня есть эта сущность:

public class Player {

    private Long id;
    private String name;
    private List<String> past;

}

Как я могу сопоставить List<String> past с String past DTO с помощью MapStruct? Например, список содержит [ Monty , Boto , Flaouri ], а строка DTO должна содержать «Monty, Boto, Flaouri» в одной строке.

Этот классический способ не работает с target и source :

@Mappings({
            @Mapping(target = "past", source = "past"),
})
PlayerDto entityToDto(final Player entity);

Спасибо

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
2 050
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вам нужно определить метод по умолчанию в вашем интерфейсе картографа для обработки преобразования данных из List<String> в String. Mapstruct автоматически использует метод по умолчанию.

Сигнатура метода по умолчанию для вашего сопоставления должна быть такой:

String map(List<String> past)

Пример :

default String map(List<String> past) {
    return past.stream().collect(Collectors.joining(","));
}

Спасибо за ваш ответ, но где я могу его использовать? В @Mapping?

Fizik26 20.05.2019 12:14
MapStruct автоматически обнаружит метод по умолчанию и использует его. Вам не нужно объявлять его, просто поместите метод в интерфейс вашего картографа. В сгенерированном файле вы должны увидеть что-то вроде этого playerDto.setPlayer( map( player.getPlayer() ) );
Andrianekena Moise 20.05.2019 12:18

Я сейчас только тестирую. У меня есть эта ошибка, не знаю почему: Can't map property "java.lang.String past" to "java.util.List<xxxxxxxxxxxx.String> past"

Fizik26 21.05.2019 09:34

о, кажется, ошибка другая. Вы пытаетесь сопоставить String с List. Если это так, вам нужно определить default method List<String> map(String past) в вашем картографе.

Andrianekena Moise 21.05.2019 09:45

и.. если исходное и целевое свойства совпадают («прошлые»), вам не нужно указывать @Mapping(target = "past", source = "past")

Sjaak 21.05.2019 20:40

Другие вопросы по теме