J'ai ces 3 classes dans des fichiers séparés
public class Book {
@Id
@GeneratedValue
private Long id;
@NonNull
private String title;
@NonNull
private Author author;
}
public class Author {
@Id
@GeneratedValue
private Long id;
@NonNull
private String firstName;
@NonNull
private String lastName;
}
public class BookDTO {
private Long id;
@NonNull
private String title;
@NonNull
private String author;
}
J'ai le mappeur suivant
@Mapper
public interface BookMapper {
BookMapper INSTANCE = Mappers.getMapper(BookMapper.class);
@Mappings({
@Mapping(source = "author.lastName", target = "author")
})
BookDTO toDTO(Book book);
}
actuellement, cela ne fait que mapper le nom et fonctionne, et je veux mapper la chaîne d'auteur dans Book avec
author.firstName + " " + author.lastName
comment pourrais-je faire ça? Je n'ai rien trouvé dans la documentation MapStruct.
MapSruct ne prend pas en charge le mappage de plusieurs propriétés source en une seule propriété cible.
Vous avez 2 façons d'y parvenir:
@Mapping( target = "author", expression = "Java(book.getAuthor().getFirstName() + \" \" + book.getAuthor().getLastName())")
@AfterMapping
ou @BeforeMapping
@Mapper
public interface BookMapper {
BookMapper INSTANCE = Mappers.getMapper(BookMapper.class);
@Mapping(target = "author", ignore = true)
BookDTO toDTO(Book book);
@AfterMapping
default void setBookAuthor(@MappingTarget BookDTO bookDTO, Book book) {
Author author = book.getAuthor();
bookDTO.setAuthor(author.getFirstName() + " " + author.getLastName());
}
}