Spring RestAPI с клиентом Feign и Pageable - PullRequest
0 голосов
/ 14 октября 2019

У меня есть работающий API со всеми необходимыми мне методами CRUD, но у меня также есть Feign Client, который выдает меня и исключение при вызове моего метода GET с возможностью просмотра страниц. Я попытался изменить его на List <>, но в конце концов мне нужно, чтобы он оставался Pageable, на данный момент я понятия не имею о том, что происходит.

Это рабочий контроллер в исходном API:

@RestController
@RequestMapping("/cargos")
public class CargoController {


    @Autowired
    private CargoService cargoService;

    // ACHAR TODOS
    @GetMapping
    public Page<Cargo> consultar(Pageable paginacao) {
        return cargoService.consultar(paginacao);

    }

}

Это Сервис на исходном API:

@Service
public class CargoService {
    @Autowired
    private CargoRepositorio repositoryCargos;

    // BUSCA TODOS
    public Page<Cargo> consultar(Pageable paginacao) {
        return repositoryCargos.findAll(paginacao);

    }
}

Это все работает, но в Feign Client каждый раз, когдаМетод get вызывается, он выдает и исключение:

catch (InvocationTargetException ex) {ReflectionUtils.rethrowRuntimeException (ex.getTargetException ());

Вот как моя симуляцияклиент, у меня есть сервис для этого:

@FeignClient(url="http://localhost:8080/cargos",name="cargo")
public interface CargoFeign {

    //BUSCA TODOS
    @GetMapping
    Page<Cargo> consultar(Pageable paginacao);

и планировщик:

@Component
@Slf4j
public class CargoScheduler {

    @Autowired
    private CargoFeign cargoFeign;

    @Scheduled(cron = "0/1  * * * * *")
    public void executar() {
        log.debug("executando");

// BUSCANDO TODOS OS CARGOS
        Pageable paginacao = PageRequest.of(0, 10, Sort.by( Order.asc("id")));
        Page<Cargo> cargo2 = cargoFeign.consultar(paginacao);
        System.out.println("Listando Cargos");
        System.out.println(cargo2);
}

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Просто чтобы уточнить, этот ответ немного помог

Page Data Spring Dataable не поддерживается как RequestParam в клиенте Feign

Так выглядит мой клиент теперь

//BUSCA TODOS
    @GetMapping("/pagina/{paginaAtual}/tamanho/{tamanho}")
    Page<Cargo> findAll(@PathVariable("paginaAtual") Integer paginaAtual, @PathVariable("tamanho") Integer tamanho);
0 голосов
/ 14 октября 2019

Вы можете использовать Ресурс или Ресурсы, предоставленные Spring HATEOAS. вам нужно добавить зависимость Spring HATEOAS на стороне клиента:

compile('org.springframework.boot:spring-boot-starter-hateoas')

Включить поддержку гипермедиа Spring Boot в вашем основном классе:

@EnableHypermediaSupport(type = EnableHypermediaSupport.HypermediaType.HAL)

и изменить своего симулированного клиента:

@FeignClient(url="http://localhost:8080/cargos",name="cargo")
public interface CargoFeign {
//BUSCA TODOS
@GetMapping
Resources<Cargo> consultar(Pageable paginacao);
...