簡體   English   中英

如何在Spring引導分頁中返回DTO而不是實體?

[英]How to returnDTO instead of entity in Spring boot pagination?

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

StudentDTO 類可以有一個帶有 Student 參數的構造函數。

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

然后你可以在 Page 對象上調用map

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

請看這里- 這是一種如何在 Spring Data REST 項目中使用 DTO 的方法

您可以執行以下操作:

 @Query("SELECT new StudentDTO(student.id, student.name) FROM Student student "
            + "WHERE student.name like :name ")
    List<StudentDTO> findAllCustomBy(@Param("name") String name)

然后在 StudentDto 中創建一個構造函數

   public class StudentDto {
        public StudentDto(Long id, String name){
          this.id = id;
          this.name = name;
        }
Pageable pageable = PageRequest.of(pageNo,PAGE_SIZE_12);
Page<StudentDTO> studentDTO = new PageImpl<>(studentDTO ,pageable,studentDTO.size());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM