【发布时间】:2022-10-23 14:49:54
【问题描述】:
几天以来,我一直在使用 MapStruct,但还没有达到我所需要的。
作为 Spring 练习的一部分,我正在编写一个小应用程序,它将显示有关电影的信息(标题、描述、导演等)以及电影类别。 因此,我创建了一个名为 Category 的附加实体,以便(例如管理员)可以添加或删除单个类别名称。
电影实体:
public class Movie {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String content;
private String director;
private int year;
@ManyToMany
@Column(nullable = false)
private List<Category> category;
private LocalDate createdAt;
}
类别实体
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String categoryName;
private LocalDate createdAt;
}
我将它们全部打包到 MapStruct 和 DTO 中。
MovieDTORequest.java
public class MovieDTORequest {
private String title;
private String content;
private String director;
private List<Category> category;
private int year;
}
MovieDTOResponse.java
public class MovieDTOResponse {
private String title;
private String content;
private String director;
private String categoryName;
private int year;
private LocalDate createdAt;
}
和MovieMapper.java
@Mapper(componentModel = "spring")
public interface MovieMapper {
@Mapping(target = "categoryName", source = "category")
MovieDTOResponse movieToMovieDTO(Movie movie);
@Mapping(target = "id", source = "title")
@Mapping(target = "createdAt", constant = "")
Movie movieRequestToMovie(MovieDTORequest request);
@Mapping(target = "id", source = "title")
@Mapping(target = "createdAt", constant = "")
void updateMovie(MovieDTORequest request, @MappingTarget Movie target);
String map(List<Category> value);
}
但是,我对 Mapper 有疑问。首先,我得到了错误:
"Can't map property "List<Category> category" to "String categoryName". Consider to declare/implement a mapping method: "String map(List<Category> value)"
当我在 Mapper 中编写它时,我还有一个错误:
Can't generate mapping method from iterable type from java stdlib to non-iterable type.
我正在寻求帮助,因为我已经迷路了。
【问题讨论】:
标签: spring dto mapstruct iterable