javaspringjpadtopageable

How do I make a DTO for the Page<> interface?


I am writing an online store using Spring Boot (MVC) and Hiberbate. The problem is that when I get a list of drinks, JSON gives me unnecessary information from the Page interface. I don't know how you can create an DTO for the interfaces to get rid of these fields. What should I do in this situation. Can someone have a ready-made solution?

enter image description here

    public Page<DrinkDTO> getAllDrinks(int page, int pageSize) {

        PageRequest pageRequest = PageRequest.of(page, pageSize, Sort.by("id"));

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

        return drinkMapper.drinksToDrinksDTO(drinks);
    }

Solution

  • @Data
    @AllArgsConstructor
    public class CustomPage {
    
        Long totalElements;
    
        int totalPages;
    
        int number;
    
        int size;
    }
    
    @Data
    public class PageDTO<T> {
    
        List<T> content;
    
        CustomPage customPage;
    
        public PageDTO(Page<T> page) {
            this.content = page.getContent();
            this.customPage = new CustomPage(page.getTotalElements(),
                    page.getTotalPages(), page.getNumber(), page.getSize());
        }
    

    Service for example:

    public PageDTO<DrinkDTO> getAllDrinks(int page, int pageSize) {
    
            PageRequest pageRequest = PageRequest.of(page, pageSize, Sort.by("id"));
    
            final Page<Drink> drinks = drinkRepository.findAll(pageRequest);
    
            return new PageDTO<DrinkDTO>(drinkMapper.drinksToDrinksDTO(drinks));
        }