Java Mapstruct使用列表避免循环问题<;A>;B类中的属性
如果我有一个班级ProfessorDto和一个班级StudentDto如果ProfessorDto有一个StudentDto列表,StudentDto有一个ProfessorDto类型的属性,我如何避免循环问题? 我没有给出域类的代码,但假设它与Dto的代码相同 我是Mapstruct的新手,将一个域bean转换成一个Dto,它具有简单的属性,如Long、String,但在我的示例中,关系OneToMany不起作用Java Mapstruct使用列表避免循环问题<;A>;B类中的属性,java,list,circular-dependency,relation,mapstruct,Java,List,Circular Dependency,Relation,Mapstruct,如果我有一个班级ProfessorDto和一个班级StudentDto如果ProfessorDto有一个StudentDto列表,StudentDto有一个ProfessorDto类型的属性,我如何避免循环问题? 我没有给出域类的代码,但假设它与Dto的代码相同 我是Mapstruct的新手,将一个域bean转换成一个Dto,它具有简单的属性,如Long、String,但在我的示例中,关系OneToMany不起作用 @JsonApiResource(type = "professor") @No
@JsonApiResource(type = "professor")
@NoArgsConstructor
@Data
public class ProfessorDto {
@JsonApiId
private Long id;
private String professorName;
@JsonApiRelation(mappedBy = "professor")
private List<StudentDto> student;
public ProfessorDto(Long id) {
this.id = id;
}
}
我为教授绘制的地图是
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface ProfessorMapper {
ProfessorDto domainToDto(Professor domain);
Professor dtoToDomain(ProfessorDto dto);
StudentDto studentToDto(Student student);
Student studentDtoToDomain(StudentDto studentDto);
List<StudentDto> studentToDto(List<Student> student);
List<Student> studentDtoToDomain(List<StudentDto> studentDto);
}
@Mapper(componentModel=“spring”,unappedTargetPolicy=ReportingPolicy.IGNORE)
公共接口映射器{
领域教授(领域教授);
德托多姆教授(德托教授);
学生对学生(学生);
StudentToDomain(StudentToStudentTo);
列出学生TOTO(列出学生);
列出studentDto域(列出studentDto);
}
使用@Context注释查看此示例
有关@Context注释的更多信息,请参见下面的Mapstruct文档
首先,您应该决定是否真的需要将
列表
聚合到ProfessorDto
。如果可能的话,你可以把它排除在外。
否则,您可以将
StudentDto
或ProfessorDto
设置为“平坦”。例如,您可以将字段Long professorId
而不是ProfessorDto professor
添加到StudentDto
,或将列出studentId
添加到ProfessorDto
使用Mapstruct的示例方法:
@JsonApiResource(type = "student")
@NoArgsConstructor
@Data
public class StudentDto {
@JsonApiId
private Long id;
private String studentName;
private Long professorId; // <-- CHANGED
}
@JsonApiResource(type = "student")
@NoArgsConstructor
@Data
public class StudentDto {
@JsonApiId
private Long id;
private String studentName;
private Long professorId; // <-- CHANGED
}
@Component
public class MapperHelper {
@AfterMapping
public void mapProfessorId(Student student, @MappingTarget StudentDto studentDto) {
studentDto.setProfessorId(student.getProfessor().getId());
}
}