java - Spring Rest API 与 Feign 客户端和可分页

标签 java spring-boot spring-cloud-feign feign

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

这是原始 API 上的工作 Controller :

@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')

在主类中启用 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);

关于java - Spring Rest API 与 Feign 客户端和可分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58381993/

相关文章:

java - 批量运行 30 个 jar 并保存每个 jar 的输出结果

java - 如何在Java中捕获cucumber中的多行文本

spring-boot - 有没有办法记录假客户端的响应时间

java - 是否可以在没有服务器的情况下使用实体类和EntityManager?

java - 带有 Spring Boot 的 Docker 和 Eureka 无法注册客户端

java - 无法使用 @springboot.web.CommentsApiControllerTest$WithMockCustomUser 创建 SecurityContext

spring-boot - 来自触发器的异常映射 - spring-boot 2.4.x + jOOQ

java - 使用 @ControllerAdvice 进行 Spring 异常处理提供了集中控制,但我们必须在方法签名中添加所有抛出异常

java - Spring Data JPA 和 Feign 的组合映射

java - @ExceptionHandler 没有捕获 HttpMessageNotReadableException