Как сортировать сущность репозитория с нумерацией страниц при весенней загрузке - PullRequest
0 голосов
/ 09 апреля 2020

Я пишу REST API с помощью Spring Boot. Здесь я пытаюсь отсортировать список, используя 'PagingAndSortingRepository'. Это то, что я пробовал в качестве метода в своем классе контроллера

@GetMapping public ResponseEntity
<PagedModel<ComplainDTO>> getComplains(@RequestParam(defaultValue = "0",value = "page",required =false)int page, @RequestParam(value="sortBy" ,required = false,defaultValue = "complainId") String sortBy, PagedResourcesAssembler assembler) { 
    return ResponseEntity.status(HttpStatus.OK)
     .body(assembler.toModel(complainService.getAllComplains(page,sortBy)));
  }

Метод на мой сервис

@Override
    public Page<ComplainDTO> getAllComplains(int page,String sortBy) {

        Pageable pageable = PageRequest.of(page,20, Sort.by(sortBy));
        Page<ComplainEntity> result =complainRepository.findAll(pageable);
        return result.map(complainEntity -> toDTO(complainEntity));
    }

Я беру ввод от потребителя для сортировки списка на основе заданного атрибута, однако поведение сортировки по умолчанию - Ascending. Итак, как я могу реализовать это, принимая пользовательские параметры независимо от того, идет ли это по возрастанию или спуск в сторону от использования if-else.

1 Ответ

0 голосов
/ 09 апреля 2020

Единственный вариант - попросить пользователя предоставить порядок сортировки, используя @RequestParam

 @GetMapping public ResponseEntity
<PagedModel<ComplainDTO>> getComplains(@RequestParam(defaultValue = "0",value = "page",required =false)int page, 
        @RequestParam(value="sortBy" ,required = false,defaultValue = "complainId") String sortBy, 
        @RequestParam(value="orderBy" ,required = false,defaultValue = "ASC") String orderBy, PagedResourcesAssembler assembler) { 

return ResponseEntity.status(HttpStatus.OK)
 .body(assembler.toModel(complainService.getAllComplains(page,sortBy,orderBy)));

}

, а затем в сервисе передать порядок сортировки в Sort метод

@Override
public Page<ComplainDTO> getAllComplains(int page,String sortBy, String orderBy) {

    Pageable pageable = PageRequest.of(page,20, Sort.by(Sort.Direction.valueOf(orderBy),sortBy));
    Page<ComplainEntity> result =complainRepository.findAll(pageable);
    return result.map(complainEntity -> toDTO(complainEntity));
}
...