Spring MVC. Как на самом деле работает Pageable?

#java #spring #spring-mvc #pagination

#java #spring #spring-mvc #разбивка на страницы

Вопрос:

Пожалуйста, помогите мне разобраться, как Spring анализирует параметры HTTP GET из запроса в объект, подходящий для просмотра страниц, без каких-либо дополнительных аннотаций, таких как @RequestBody, @RequestParam и т.д.

Итак, я отправляю запрос, который выглядит следующим образом: GET /questions?page=0amp;size = 2amp;sort=createdAt,desc. В качестве аргумента метода getQuestions я получаю объект, состоящий из трех полей, таких как страница, размер, сортировка. Но как на самом деле работает это волшебство?

 @RestController
public class QuestionController {

    @Autowired
    private QuestionRepository questionRepository;

    @GetMapping("/questions")
    public Page<Question> getQuestions(Pageable pageable) {
        return questionRepository.findAll(pageable);
    }


    @PostMapping("/questions")
    public Question createQuestion(@Valid @RequestBody Question question) {
        return questionRepository.save(question);
    }

    // other restful methods
}
  

Комментарии:

1. Это не волшебство. Spring знает, что вам нужно Pagable — это прямо там, в аргументе метода. Затем он просто ищет хорошо известные параметры запроса. На самом деле все тривиально просто. Вы можете зарегистрировать свои собственные связыватели данных и фактически сделать то же самое для своих собственных типов.

2.docs.spring.io/spring-data/jpa/docs/current/reference/html/…,