带有Feign Client和Pageable的Spring RestAPI

时间:2019-10-14 18:07:08

标签: java spring-boot spring-cloud-feign feign

我有一个可以正常使用的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(ex 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 :(得分:0)

您可以使用spring HATEOAS提供的Resource或Resources。 您需要在客户端添加spring HATEOAS依赖项:

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

在主类中启用Spring Boot的Hypermedia支持:

@EnableHypermediaSupport(type = EnableHypermediaSupport.HypermediaType.HAL)

并更改您的伪装客户:

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

答案 1 :(得分:0)

只需澄清一下,这个answear有所帮助

Spring Data Pageable not supported as RequestParam in Feign Client

这是我的假客户现在的样子

//BUSCA TODOS
    @GetMapping("/pagina/{paginaAtual}/tamanho/{tamanho}")
    Page<Cargo> findAll(@PathVariable("paginaAtual") Integer paginaAtual, @PathVariable("tamanho") Integer tamanho);