我有一个可以正常工作的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);
}
您可以使用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);