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;
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...