1
resposta

Dúvida sobre o pageable!

2025-02-19T15:32:21.474-03:00 WARN 18568 --- [CEE] [nio-8080-exec-2] ration$PageModule$WarningLoggingModifier : Serializing PageImpl instances as-is is not supported, meaning that there is no guarantee about the stability of the resulting JSON structure! For a stable JSON structure, please use Spring Data's PagedModel (globally via @EnableSpringDataWebSupport(pageSerializationMode = VIA_DTO)) or Spring HATEOAS and Spring Data's PagedResourcesAssembler as documented in https://docs.spring.io/spring-data/commons/reference/repositories/core-extensions.html#core.web.pageables.

Ao implementar um pageable em um get, estou tendo isso de retorno ao realizar a requisição.

1 resposta

Olá Gabriel! Tudo bem?

A mensagem de aviso que você está recebendo indica que a serialização direta de PageImpl pode não garantir um formato JSON estável. Isso pode ser um problema se você precisa de um formato consistente para o seu front-end ou para outras partes do seu sistema.

Para resolver isso, você pode usar o PagedModel do Spring Data REST ou o PagedResourcesAssembler do Spring HATEOAS. Aqui está um exemplo de como você pode implementar isso usando o PagedResourcesAssembler:

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PagedResourcesAssembler;
import org.springframework.hateoas.PagedModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/your-endpoint")
public class YourController {

    private final YourService yourService;

    public YourController(YourService yourService) {
        this.yourService = yourService;
    }

    @GetMapping
    public PagedModel<YourResource> getAll(Pageable pageable, PagedResourcesAssembler<YourEntity> assembler) {
        Page<YourEntity> page = yourService.findAll(pageable);
        return assembler.toModel(page, yourEntity -> new YourResource(yourEntity));
    }
}

Neste exemplo, YourEntity é a entidade que você está paginando, e YourResource é um DTO ou recurso que você deseja retornar. O PagedResourcesAssembler ajuda a converter a página em um PagedModel, que é mais estável para serialização.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.