java - 带有 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);
}
解决方案
您可以使用 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);
推荐阅读
- r - loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) 中的错误:没有名为“rio”的包
- javascript - 使用 JavaScript 在 HTML 表格中显示从 JSON 获取的数据 - 网站上不同部分中的不同数据部分
- jquery - 如何在点击时覆盖 jQuery 函数以进行图像缩放?
- python - 如何将 HTML 转换为 docx
- vba - Word VBA Documents.Open 在错误地传递文件夹路径而不是文件路径时删除文件夹中的文件
- reactjs - 类型错误:无法在 runMicrotasks 读取未定义的属性“主题”
- javascript - 如果兄弟值等于某个值,Firebase 会更新一个值
- .net - C# - 详细说明时如何不使 WPF UI 冻结
- amazon-web-services - AWS ASG 中的自动解封 Vault 失败
- r - 使用库克距离的 afex::mixed 异常值检测