Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

"No primary or single unique constructor found for interface org.springframework.data.domain.Pageable"

Estou recebendo este erro após alterar a aplicação para receber o objeto paginação pelo parâmetro.

8 respostas

Oi Simone, posta aqui o código do seu controller, inclusive com os imports.

Oi Rodrigo, segue. (obs: meus objetos são diferentes mas a lógica é a mesma)

Main:

package io.github.beinlichsimone.vacationtrip;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.data.web.config.EnableSpringDataWebSupport;

@EnableCaching
@EnableSpringDataWebSupport //paginação e ordenação
@SpringBootApplication
public class VacationTripApplication {

    public static void main(String[] args) {
        SpringApplication.run(VacationTripApplication.class, args);
    }

}

Controller:

package io.github.beinlichsimone.vacationtrip.controller;

import io.github.beinlichsimone.vacationtrip.dto.viagem.ViagemAtualizaDTO;
import io.github.beinlichsimone.vacationtrip.dto.viagem.ViagemDetalheDTO;
import io.github.beinlichsimone.vacationtrip.dto.viagem.ViagemCadastroDTO;
import io.github.beinlichsimone.vacationtrip.dto.viagem.ViagemRetornoDTO;
import io.github.beinlichsimone.vacationtrip.model.Viagem;
import io.github.beinlichsimone.vacationtrip.repository.ViagemRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.UriComponentsBuilder;

import java.net.URI;
import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("viagem")
public class ViagemController {

    @Autowired
    private ViagemRepository viagemRepository;

    @GetMapping("/viagens")
    @Cacheable(value="listaViagens")
    public Page<ViagemRetornoDTO> getViagens(@PageableDefault(sort = "id", direction = Sort.Direction.DESC) Pageable paginacao){

        Page<Viagem> viagens = viagemRepository.findAll(paginacao);
        return ViagemRetornoDTO.converterParaDTO(viagens);
    }

Postman:

postman

No seu projeto tem alguma classe de configuração que implementa a interface WebMvcConfigurer ?

Não tenho...

Pois é, não consigo identificar o possível problema. Você consegue compartilhar seu projeto? via github ou link compartilhado do google drive

solução!

No seu projeto tem uma classe chamada WebConfig que acaba sobrescrevendo um compartamento do Spring.

Adicione nela esse método:

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    argumentResolvers.add( new PageableHandlerMethodArgumentResolver());
}

Deu certo Rodrigo. Muito obrigada!