如何解决Java映射集设置为另一个集使用模型映射器或任何其他方式
在我目前正在研究的项目中,有一个Project类,
public class project {
private Integer projectId;
private String projectName;
//getters & Setters
}
该项目正在作为用户类中的设置使用
public class User {
private Integer userId;
private Set<Project> projects;
//getters & Setters
}
我需要将此User类映射到UserDto。 UserDto如下所示。
public class UserDto {
private Integer userId;
private Set<ProjectDto> projectDtos;
//getters & Setters
}
ProjectDto也与Project类相同。
public class projectDto {
private Integer projectId;
private String projectName;
//getters & Setters
}
要映射User和UseDto,我尝试了以下代码。但这是一个错误。
private UserDto map(User user) {
UserDto userDto = new UserDto();
userDto.setUserId(user.getUserId());
Set<ProjectDto> projectDto= new HashSet<>();
Type setType = new Typetoken<HashSet<ProjectDto>>(){}.getType();
projectDto = modelmapper.map(user.getProjects(),setType);
userDto.setProjectDto(projectDto);
return userDto;
}
返回以下错误:
无法将org.hibernate.collection.internal.PersistentSet转换为 java.util.Set
如果您能为此支持我,那将是很棒的。也欢迎不使用modelmapper的答案。 预先感谢!
解决方法
首先向ProjectDto类添加一个构造函数:
public class ProjectDto {
private Integer projectId;
private String projectName;
public ProjectDto(Integer projectId,String projectName) {
this.projectId = projectId;
this.projectName = projectName;
}
//getters & Setters
}
然后使用Java 8流API,可以这样完成:
private UserDto map(User user) {
UserDto userDto = new UserDto();
userDto.setUserId(user.getUserId());
userDto.setProjects(user.getProjects().stream()
.map(project -> new ProjectDto(project.getProjectId(),project.getProjectName()))
.collect(Collectors.toSet()));
return userDto;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。