Pageable REST API - PullRequest
       9

Pageable REST API

0 голосов
/ 08 ноября 2018

Я использую Pageable для возврата результатов JSON со страницами. Один пример моего контроллера

@GetMapping("/nome/{nome}")
public ResponseEntity<Page<Cidadao>> consultaPorNome(
        @PathVariable(value="nome",required=true) String nome,
        @RequestParam(value="pagina", defaultValue="0") Integer page,
        @RequestParam(value="quantidade", defaultValue="10") Integer linesPerPage,
        @RequestParam(value="ordem", defaultValue="nome") String orderBy, 
        @RequestParam(value="direcao", defaultValue="ASC") String direction){

    Page<Cidadao> lista = cidadaoService.findByNome(nome,page,linesPerPage,orderBy, direction);
    return ResponseEntity.ok(lista);


}

И я получаю JSON как

{
"content": [
    {
        "id": 1,
        "name": "Lucas"
    },
    {
        "id": 2,
        "name": "Erick"
    },
],
"totalElements": 23,
"totalPages": 3,
"last": false,
"numberOfElements": 10,
"first": true,
"sort": [
    {
        "direction": "ASC",
        "property": "nome",
        "ignoreCase": false,
        "nullHandling": "NATIVE",
        "ascending": true,
        "descending": false
    }
],
"size": 10,
"number": 0

}

но я бы хотел вернуться сюда

{
    "data":{
         "content" : [
            {
             "id": 1,
              "name": "Lucas"
            },
            {
             "id": 1,
              "name": "Lucas"
            }         
          ],
          "totalElements": 23,
          "totalPages": 3,
          "last": false,
          "numberOfElements": 10,
          "first": true,
          "sort": [
              {
                  "direction": "ASC",
                  "property": "nome",
                  "ignoreCase": false,
                  "nullHandling": "NATIVE",
                  "ascending": true,
                  "descending": false
              }
          ],
          "size": 10,
          "number": 0
    },
    errors:[]
}

Возможно, реализует что-либо подобное для изменения или добавления атрибутов, таких как ошибки? Или, если возможно, измените атрибуты имени из Page, например, totalElements для numberofTotalElementBySomething .... ??

1 Ответ

0 голосов
/ 08 ноября 2018

Когда я искал, я не нашел красивое решение для этого. Итак, я сделал так:

Создайте класс с именем PageAdapter (или как вам нравится)

public class PageAdapter<T extends Serializable> implements Serializable   {

    private long totalElements;
    private long totalPages;
    private long size;
    private List<T> content;

    public PageAdapter(Page<T> page){
        this.totalElements = page.getTotalElements();
        this.totalPages = page.getTotalPages();
        this.size = page.getSize();
        this.content = page.getContent();
    }
}    

И получите в конструкторе оригинальный Pageable. Вы можете настроить свои свойства, эти свойства были использованы в моем случае. После этого вы можете вернуть PageAdapter в свой контроллер / ресурс.

если есть лучшее решение, я бы тоже хотел знать.

Предложение для вас, Spring может получить экземпляр Pageable, поэтому вам не нужно получать каждый параметр для размера, страницы, порядка и т. Д. Просто сделайте это:

public ResponseEntity<Page<Cidadao>> consultaPorNome(
    @PathVariable(value="nome",required=true) String nome, Pageable pageable){

У вас будет вся информация о размере, странице, заказе ...

Я не являюсь носителем английского языка, поэтому может содержать грамматические ошибки.

...