java - 如何在 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;
}
解决方案
StudentDTO 类可以有一个带有 Student 参数的构造函数。
public StudentDTO(Student student) {
this._id = student.getId();
this.name = student.getName();
}
然后您可以调用map
Page 对象。
Page<StudentDTO> dtoPage = page.map(student -> new StudentDTO(student));
推荐阅读
- javascript - 如何根据收到的值更改按钮?
- css - Google Fonts 在 Chrome 和 Chromium 之间提供不同的 WOFF2 文件
- powerapps - 这是否考虑在 Powerapps 画布应用功能中进行硬编码?
- git - Git说一个文件被修改了,即使它没有
- java - Java 程序接受输入两次
- css - 如何将文本装饰添加到我的 Angular Material mat-form-field?
- c - 如何检查程序是否在c中静态编译
- c++ - SetTextColor 不改变命令行文本颜色
- javascript - jQuery 事件:keypress 不适用于 Firefox 或 IE,并且 keyup 不适用于 IE
- c - 为什么子进程在使用来自父输出的 stdin 的 fork 和管道时正在等待?