我把这三门课分别放在不同的文件中
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;
}
我有下面的映射器
@Mapper
public interface BookMapper {
BookMapper INSTANCE = Mappers.getMapper(BookMapper.class);
@Mappings({
@Mapping(source = "author.lastName", target = "author")
})
BookDTO toDTO(Book book);
}
这目前仅映射lastName并起作用,我想将Book中的作者字符串映射为
author.firstName + " " + author.lastName
我怎么能这么做?我在MapStruct文档中找不到任何东西。
MapSruct不支持将多个源属性映射到单个目标属性。
有两种方法可以实现这一点:
@Mapping( target = "author", expression = "java(book.getAuthor().getFirstName() + \" \" + book.getAuthor().getLastName())")
@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());
}
}
“想要解决方案B” 有什么办法可以做到这一点吗?
我提到了用Mapstruct将多个源字段映射到同一类型目标字段的问题,但这没有帮助 我的rest资源类如下所示 我的实体类是源代码,如下所示: 我想在mapper类中用emailAdddress或devices或mobileNumbers映射源类中的地址,我尝试在mapper类中使用@AfterMapping和一个decorator类,但它没有帮助。 我有一个像这样的映射器类
考虑以下POJO: 使用MapSTRt,我创建了一个映射器,将映射到。由于“业务”“逻辑”,我需要将和约束为的和字段值。这是我使用另一个类得出的结论: 有没有其他方法可以实现这一点(即另一种映射器、装饰器等)?如何将多个值(xml附表、讲座)传递给映射器?
我需要将源类中的字段值映射到字段属性。我可以使用Mapstruct使用@mapper注释的'expression'参数来完成 有没有其他方法可以不使用“表达式”来进行映射?
我想映射2个模型,其中每个模型都有几乎相同的枚举。让我展示: 第一个模型有枚举: 第二个模型具有枚举: 我有这样的自定义映射方法: 然后我用: 但是你可以得到: 我还创建了枚举映射器,如: 但我不需要单独设置,只希望枚举字段映射到内部映射中。简单地说,当我做枚举时,也应该映射。 谢谢 p、 对不起我的英语,希望我的问题有意义:)
假设我有这些实体: null