Как вернуть код с нумерацией страниц только с краткой информацией о странице? - PullRequest
1 голос
/ 25 апреля 2019

Я использую Hibernate, JPA и Spring и хочу вернуть json с разбитыми на страницы займами. Я хочу, чтобы информация о странице была простой и имела только страницу, размер и общее количество, как показано ниже:

{
  "items":[
    {
      “id”: 1,
      “total”: 2500.00
      “user_id”: 1
    },
    {
      “id”: 2,
      “total”: 65120.75
      “user_id”: 1
    }
  ],
  "paging":{
    "page": 1,
    "size": 50,
    "total": 1500
  }
 }

У меня есть хранилище JPA для ссуд.

Вот так сейчас выглядит мой контроллер:

@RestController
@RequestMapping("/loans")
public class LoansController {

@Autowired
private UserLoansRepository loansRep;

@GetMapping(params = { "page", "size" })
public Page<UserLoansEntity> findPaginated(@RequestParam("page") int page,
                             @RequestParam("size") int size) {

    Pageable pages = PageRequest.of(page, size);
    Page<UserLoansEntity> resultPage = loansRep.findAll(pages);

    return resultPage;
}
}

Я получаю это вместо:

{
    "content": [
        {
            "idLoan": 10,
            "total": 222
        },
        {
            "idLoan": 11,
            "total": 3333
        },
        {
            "idLoan": 12,
            "total": 3333.33
        }
    ],
    "pageable": {
        "sort": {
            "sorted": false,
            "unsorted": true,
            "empty": true
        },
        "pageSize": 3,
        "pageNumber": 0,
        "offset": 0,
        "unpaged": false,
        "paged": true
    },
    "last": false,
    "totalPages": 2,
    "totalElements": 5,
    "first": true,
    "sort": {
        "sorted": false,
        "unsorted": true,
        "empty": true
    },
    "numberOfElements": 3,
    "size": 3,
    "number": 0,
    "empty": false
}

Любая помощь?

1 Ответ

2 голосов
/ 25 апреля 2019

Вероятно, будет полезно, если вы отобразите сущность на объект DTO, который вы можете вернуть из API.

Вы можете сопоставить свойства вручную или использовать библиотеку сопоставления объектов (например, Орика, Джексон). Просто чтобы дать вам приблизительное представление:

PageDto pageDto = new PageDto();
pageDto.setPage(resultPage.getPageable().getPageSize());
pageDto.setSize(resultPage.getPageable().getPageNumber() + 1);
pageDto.setTotal(resultPage.getTotalElements());

pagedResponseDto.setPaging(pageDto);
pagedResponseDto.setItems(pageDto.getContent());

, где PageDto и PagedResponseDto (приблизительно):

class PageDto {

  private Integer page;
  private Integer size;
  private Integer total;
}
class PagedResponseDto<T> {

  private List<T> items;
  private PageDto pageDto;
}

Мало того, что это поможет вам в достижении вашей цели, это также хорошая практика, чтобы бины на уровне API были отделены от представления домена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...