首页 > 解决方案 > 带有 Feign 客户端和可分页的 Spring RestAPI

问题描述

我有一个包含我需要的所有 CRUD 方法的有效 API,但我也有一个 Feign 客户端,当我的可分页 GET 方法被调用时,它会抛出我和异常。我尝试将其更改为 List<>,但最后我需要它保持可分页,此时我不知道发生了什么。

这是原始 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);
}

标签: javaspring-bootspring-cloud-feignfeign

解决方案


您可以使用 Spring HATEOAS 提供的 Resource 或 Resources。您需要在客户端添加 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);

推荐阅读