Spring 带有 Feign Client 和 Pageable 的 Rest API
Spring RestAPI with Feign Client and Pageable
我有一个可用的 API,其中包含我需要的所有 CRUD 方法,但我还有一个 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);
}
您可以使用 spring HATEOAS 提供的资源。
您需要在客户端添加 spring HATEOAS 依赖项:
compile('org.springframework.boot:spring-boot-starter-hateoas')
在主 class:
中启用 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);
澄清一下,这个回答有点帮助
这就是我的假客户现在的样子
//BUSCA TODOS
@GetMapping("/pagina/{paginaAtual}/tamanho/{tamanho}")
Page<Cargo> findAll(@PathVariable("paginaAtual") Integer paginaAtual, @PathVariable("tamanho") Integer tamanho);
我有一个可用的 API,其中包含我需要的所有 CRUD 方法,但我还有一个 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);
}
您可以使用 spring HATEOAS 提供的资源。 您需要在客户端添加 spring HATEOAS 依赖项:
compile('org.springframework.boot:spring-boot-starter-hateoas')
在主 class:
中启用 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);
澄清一下,这个回答有点帮助
这就是我的假客户现在的样子
//BUSCA TODOS
@GetMapping("/pagina/{paginaAtual}/tamanho/{tamanho}")
Page<Cargo> findAll(@PathVariable("paginaAtual") Integer paginaAtual, @PathVariable("tamanho") Integer tamanho);