Pagination in Spring Boot MVC - app (не перелистывает страницы)

Я пишу Spring-MVC проект (интернет-магазин). В этом проекте я использую Hibernate(Jpa). Решил добавить Pagination. Все сработало, количество товаров уменьшилось в соответствии с тем, что я указал в коде, но перелистнуть страницу у меня не получается. То есть во входной параметр когда я указываю вместо страницы 1 - страницу 2, то у меня выводятся те же товары в том же количестве. В чем может быть проблема?

DrinkClass:

@Data
@Entity
@Table(name = "drink")
@Inheritance(strategy = InheritanceType.JOINED)
public class Drink {

    // Fields
    //
    private @Id
    @GeneratedValue
    Long id;

    /* Название напитка */
    private String name;

    /* Цена напитка */
    private BigDecimal price;

    /* Описание напитка */
    private String about;

    /* Флаг удаления */
    @Column(name = "is_deleted")
    private boolean isDeleted;

    // Relationships
    //
    /* Упаковка напитка */
    @ManyToOne
    @JoinColumn(name = "packaging_id")
    private Packaging packaging;

    /* Производитель */
    @ManyToOne
    @JoinColumn(name = "manufacturer_id")
    private Manufacturer manufacturer;

    /* Страна производитель */
    @ManyToOne
    @JoinColumn(name = "country_id")
    private Countries countries;
}

Drink Repository:

public interface DrinkRepository extends JpaRepository<Drink, Long> {

    Page<Drink> findAll(Pageable pageable);
}

Drink Service:

    // Methods
    //
    /* Получение списка товаров */
    public List<DrinkDTO> getAllDrinks(int page, int pageSize) {

        PageRequest pageRequest = PageRequest.of(page, pageSize);

        final Page<Drink> drinks = drinkRepository.findAll(pageRequest);

        return drinkMapper.drinksToDrinksDTO(drinks);
    }

Drink Controller:

// Methods
    //
    // GET - methods
    //
    /* Получение списка товаров */
    @GetMapping("/drinks")
    List<DrinkDTO> getAllDrinks(@RequestParam(value = "page", defaultValue = "1") int page,
                                @RequestParam(value = "page_size", defaultValue = "2") int pageSize) {

        return drinkService.getAllDrinks(page, pageSize);
    }

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Bogdan Vorobyev
              public PageDto getAll(Integer pageNum,Integer pageSize) {
        
         Pageable pageable = PageRequest.of(pageNum == null || pageNum < 0 ? 0 : pageNum, pageSize == null || pageSize < 1 ? 10 : pageSize, Sort.Direction.ASC, "name");
        
        Page<Drink> page = drinkRepository.findAll(pageable);
 PageDto pageDto = new PageDto(); pageDto.setContent(page.getContent().stream()
                        .map(mapper::mapToDto)
                        .collect(Collectors.toList()));
                pageDto.setNumber(page.getNumber());
                pageDto.setSize(page.getSize());
                pageDto.setTotalPages(page.getTotalPages());
                pageDto.setTotalElements(page.getTotalElements()); 
    return pageDto;
        
        }

PageDto будет иметь следующий вид,например в swagger:

 Page«PageDto»:
    type: object
    properties:
      content:
        type: array
        items:
          "$ref": "#/definitions/EntityDto"
      empty:
        type: boolean
      first:
        type: boolean
      last:
        type: boolean
      number:
        type: integer
        format: int32
      numberOfElements:
        type: integer
        format: int32
      pageable:
        "$ref": "#/definitions/Pageable"
      size:
        type: integer
        format: int32
      sort:
        "$ref": "#/definitions/Sort"
      totalElements:
        type: integer
        format: int64
      totalPages:
        type: integer
        format: int32
    title: Page«PageDto»

Pageable:

 Pageable:
    type: object
    properties:
      offset:
        type: integer
        format: int64
      pageNumber:
        type: integer
        format: int32
      pageSize:
        type: integer
        format: int32
      paged:
        type: boolean
      sort:
        "$ref": "#/definitions/Sort"
      unpaged:
        type: boolean
    title: Pageable

Sort:

 Sort:
    type: object
    properties:
      empty:
        type: boolean
      sorted:
        type: boolean
      unsorted:
        type: boolean
    title: Sort

В итоге у Вас будет пагинация с сортировкой по имени.

→ Ссылка