Java Spring RestAPI与外部客户端和可分页

Java Spring RestAPI与外部客户端和可分页,java,spring-boot,spring-cloud-feign,feign,Java,Spring Boot,Spring Cloud Feign,Feign,我有一个可以工作的API,包含我需要的所有CRUD方法,但我也有一个假客户端,当调用我的pageable GET方法时,它会抛出我和异常。我试着把它改成列表,但最后我需要它保持页面可调性,在这一点上我不知道发生了什么 这是原始API上的工作控制器: @RestController @RequestMapping("/cargos") public class CargoController { @Autowired private CargoService cargoServ

我有一个可以工作的API,包含我需要的所有CRUD方法,但我也有一个假客户端,当调用我的pageable GET方法时,它会抛出我和异常。我试着把它改成列表,但最后我需要它保持页面可调性,在这一点上我不知道发生了什么

这是原始API上的工作控制器:

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


    @Autowired
    private CargoService cargoService;

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

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

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

    }
}
@RestController
@请求映射(“/cargos”)
公共类货物控制员{
@自动连线
私人货运服务;
//阿查尔托多斯
@GetMapping
公共页面顾问(可分页paginacao){
返回货物服务。领事馆(帕吉纳奥);
}
}

这是原始API上的服务:

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


    @Autowired
    private CargoService cargoService;

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

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

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

    }
}
@服务
公营货运服务{
@自动连线
私人货物寄存或寄存货物;
//布斯卡托多斯酒店
公共页面顾问(可分页paginacao){
归还回购货物。芬德尔(帕吉纳奥);
}
}
这一切都是可行的,但在外部客户机中,每次调用get方法时,它都会抛出异常:

捕获(调用TargetException ex){ ReflectionUtils.rethrowRuntimeException(例如getTargetException())

我的外国客户是这样的,我为此得到了服务:

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

    //BUSCA TODOS
    @GetMapping
    Page<Cargo> consultar(Pageable paginacao);
@FeignClient(url=”http://localhost:8080/cargos“,name=“货物”)
公共接口{
//布斯卡托多斯酒店
@GetMapping
PageConsultar(可分页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);
}
@组件
@Slf4j
公共类货物调度器{
@自动连线
私人货物外国货物外国;
@已计划(cron=“0/1*****”)
public void executar(){
log.debug(“executado”);
//BUSCANDO TODOS货物
Pageable paginacao=PageRequest.of(0,10,Sort.by(Order.asc(“id”));
第2页货物=货物外国领事馆(帕吉纳奥);
System.out.println(“Listando货物”);
系统输出打印项次(卡哥特2);
}

您可以使用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);
@FeignClient(url=”http://localhost:8080/cargos“,name=“货物”)
公共接口{
//布斯卡托多斯酒店
@GetMapping
资源顾问(paginacao可分页);

只是想澄清一下,这件安全套有点帮助

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

//BUSCA TODOS
    @GetMapping("/pagina/{paginaAtual}/tamanho/{tamanho}")
    Page<Cargo> findAll(@PathVariable("paginaAtual") Integer paginaAtual, @PathVariable("tamanho") Integer tamanho);
//buscatodos
@GetMapping(“/pagina/{paginaAtual}/tamanho/{tamanho}”)
PageFindall(@PathVariable(“paginaAtual”)整数paginaAtual,@PathVariable(“tamanho”)整数tamanho);

是的,谢谢你帮我介绍我的朋友。我通过在url中传递大小和页面,并在我的应用程序中创建一个jackson bean来修复它。