我有一个像这样的域基类:
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class Product {
private UUID id;
private Category category;
}
类别字段是枚举:
public enum Category {
BOOK("book"),
PHONE("phone");
private String name;
Category(String name) {
this.name = name;
}
public static Category fromName(String name) {
for (Category category : values()) {
if (category.getName().equals(name)) {
return category;
}
}
return null;
}
public String getName() {
return this.name;
}
}
有一个扩展产品的类:
@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class Book extends Product {
private String title;
private String isbn;
private Author author;
}
还有 DTO 类:
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class BookDtoRest {
private String title;
private String isbn;
private Author author;
}
我想在收到请求后将
BookDtoRest
映射到 Book
。我希望新创建的书籍能够正确填充父级字段 id
和 category
。您可以暂时忘记Author
。
如何使用 Mapstruct 做到这一点?
我会快速浏览一下:bealdung
@Mapper
public interface BookMapper{
Book sourceToDestination(BookDtoRest source);
}
据我了解,通过在你的maven / gradle中建立依赖关系。 使用上面的 Mapstruct 将创建映射器类,因为字段是相同的,不需要定义自定义映射。