Feign Client中不支持Spring Data Pageable作为RequestParam [英] Spring Data Pageable not supported as RequestParam in Feign Client
问题描述
我一直在尝试为我的其余api公开一个Feign Client.它以Pageable作为输入,并定义了PageDefaults.
I have been trying to expose a Feign Client for my rest api. It takes Pageable as input and has PageDefaults defined.
控制器:
@GetMapping(value = "data", produces = MediaType.APPLICATION_JSON_VALUE)
@ApiOperation(value = "Get Data", nickname = "getData")
public Page<Data> getData(@PageableDefault(size = 10, page = 0) Pageable page,
@RequestParam(value = "search", required = false) String search) {
return service.getData(search, page);
}
这是我的假客户:
@RequestMapping(method = RequestMethod.GET, value = "data")
public Page<Data> getData(@RequestParam(name = "pageable", required = false) Pageable page,
@RequestParam(name = "search", defaultValue = "null", required = false) String search);
现在问题是无论我发送给Feign Client的页面大小和页码如何,它始终会应用PageDefaults(0,10).
Now the problem is regardless of whatever page size and page number I send to Feign Client it always applies PageDefaults (0,10).
当我直接致电休息服务时,它会起作用: http://localhost:8080/data?size = 30& page = 6
When I call the rest service directly it works: http://localhost:8080/data?size=30&page=6
我正在使用Spring Boot 2.1.4.RELEASE和Spring Cloud Greenwich.SR1.最近进行了一项修复,以支持Pageable( https://github.com/spring-cloud/spring-cloud-openfeign/issues/26#issuecomment-483689346 ).但是,我不确定以上情况是否会解决,或者我丢失了某些内容.
I am using Spring Boot 2.1.4.RELEASE and Spring Cloud Greenwich.SR1. Recently a fix was done to support Pageable (https://github.com/spring-cloud/spring-cloud-openfeign/issues/26#issuecomment-483689346). However I am not sure it the above scenario is not covered or I am missing something.
推荐答案
我认为您的代码不起作用,因为您在Feign方法中对Pageable
参数使用了@RequestParam
注释.
I think your code doesn't work because you are using @RequestParam
annotation for Pageable
parameter in your Feign method.
我对这种方法的实现按预期工作.
My implementation of such a method works as expected.
客户:
@FeignClient(name = "model-service", url = "http://localhost:8080/")
public interface ModelClient {
@GetMapping("/models")
Page<Model> getAll(@RequestParam(value = "text", required = false) String text, Pageable page);
}
控制器:
@GetMapping("/models")
Page<Model> getAll(@RequestParam(value = "text", required = false, defaultValue = "text") String text, Pageable pageable) {
return modelRepo.getAllByTextStartingWith(text, pageable);
}
请注意,在我的情况下,Spring没有公开PageJacksonModule
作为bean,而是引发了异常:
Note that in my case, without exposing PageJacksonModule
as a bean, Spring raised the exception:
InvalidDefinitionException:无法构造
org.springframework.data.domain.Page
的实例
所以我不得不将其添加到项目中:
So I had to add it to the project:
@Bean
public Module pageJacksonModule() {
return new PageJacksonModule();
}
我的工作演示: github.com/Cepr0/sb-feign -client-with-pageable-demo
这篇关于Feign Client中不支持Spring Data Pageable作为RequestParam的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!