У меня есть этот 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);
Спасибо




Я думаю, вам нужно определить метод по умолчанию в вашем интерфейсе картографа для обработки преобразования данных из List<String> в String. Mapstruct автоматически использует метод по умолчанию.
Сигнатура метода по умолчанию для вашего сопоставления должна быть такой:
String map(List<String> past)
Пример :
default String map(List<String> past) {
return past.stream().collect(Collectors.joining(","));
}
MapStruct автоматически обнаружит метод по умолчанию и использует его. Вам не нужно объявлять его, просто поместите метод в интерфейс вашего картографа. В сгенерированном файле вы должны увидеть что-то вроде этого playerDto.setPlayer( map( player.getPlayer() ) );Я сейчас только тестирую. У меня есть эта ошибка, не знаю почему: Can't map property "java.lang.String past" to "java.util.List<xxxxxxxxxxxx.String> past"
о, кажется, ошибка другая. Вы пытаетесь сопоставить String с List. Если это так, вам нужно определить default method List<String> map(String past) в вашем картографе.
и.. если исходное и целевое свойства совпадают («прошлые»), вам не нужно указывать @Mapping(target = "past", source = "past")
Спасибо за ваш ответ, но где я могу его использовать? В
@Mapping?