首页 > 解决方案 > 如何在 Spring Boot 分页中返回 DTO 而不是实体?

问题描述

我的 DTO 与实体不同。如何在仍然显示所有页面的信息的同时返回 DTO 而不是带有分页的实体?

控制器:

@GetMapping("/{name}")
public Page<Student> getStudent(@PathVariable(value = "name") String name, Pageable pageable){
     Page <Student> page = studentService.getStudent(name, pageable);
     return page;
}

服务:

public Page<Student> getStudent(String name, Pageable pageable){
    Page<Student> students = studentRepository.findAllByName(name, pageable);
    return students;
}

存储库:

@Repository
public interface StudentRepository extends 
    PagingAndSortingRepository<Student, Long> {
    Page<Student> findAllByName(String name, Pageable pageable);
}

DTO:

@Data
public class StudentDTO extends ResourceSupport {
   Long _id;
   String name;
}

实体:

@Entity
@Data
@NoArgsConstructor(force = true, access = AccessLevel.PUBLIC)
public class Student {

    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private Long grade;
}

标签: javaspring-boot

解决方案


StudentDTO 类可以有一个带有 Student 参数的构造函数。

public StudentDTO(Student student) {
    this._id = student.getId();
    this.name = student.getName();
}

然后您可以调用mapPage 对象。

Page<StudentDTO> dtoPage = page.map(student -> new StudentDTO(student));

推荐阅读