Как вернуть DTO вместо сущности в Spring при загрузке? - PullRequest
0 голосов
/ 04 октября 2018

Мой 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;
}

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Пожалуйста, посмотрите здесь - это подход к работе с DTO в проектах Spring Data REST

0 голосов
/ 04 октября 2018

Вы можете сделать следующее:

 @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;
        }
0 голосов
/ 04 октября 2018

Класс 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...