带有Feign Client和Pageable的Spring RestAPI

问题描述 投票:0回答:1

我有一个可以正常工作的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);
}
java spring-boot spring-cloud-feign feign
1个回答
0
投票

您可以使用Spring HATEOAS提供的资源或资源。您需要在客户端添加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);
© www.soinside.com 2019 - 2024. All rights reserved.