[英]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.