1

正如我在这个问题中所写:https ://github.com/spring-cloud/spring-cloud-openfeign/issues/375 和这个 SO 问题中: Spring data Pageable does not work with feign client

在包含 @requestbody 元素的 POST 请求中发送 Pageable 对象时遇到一些问题。

首先,我尝试发送嵌入在我的 RequestBody 中的 Pageable,因为它是在使用 springdoc-openapi-webmvc-core 时作为示例生成的。

例子:

@PostMapping("/search") public Page<HelloDto> searchHellos(@RequestBody HelloDto example, Pageable pageable)

{ "example": { "message": "string" }, "pageable": { "pageNumber": 0, "pageSize": 50, "offset": 10, "sort": { "sorted": false, }, "paged": true, } }

不,我了解到,我也可以通过 Query 参数发送它,它将被解析。将可分页提取到 QueryParams 中的注解在 SpringDoc 中称为 org.springdoc.api.annotations.ParameterObject。

@PostMapping("/search") public Page<HelloDto> searchHellos(@RequestBody HelloDto example, @ParameterObject Pageable pageable) { return helloCallerService.callHelloServiceClient(example, pageable); }

当我尝试通过 feign 调用类似的控制器接口时,就像这个客户端接口:

@PostMapping("/search") public Page<HelloDto> searchHellos(@RequestHeader("apiKey") String apiKey, @RequestBody HelloDto example, Pageable pageable);

应用程序不会启动,因为该方法“有太多的身体参数”。我试图用 @RequestParam 注释 Pageable 但它不会被识别/解析。

我的问题是:

我们可以使用自定义的 AnnotatedParameterProcessor 例如 @ParameterObject 将 ParameterObject 扁平化并将其编码为 url 查询参数吗?

你会怎么做?还是 AnnotatedParameterProcessor 方法不对?我可能需要扩展器或其他东西吗?

4

1 回答 1

1

您的问题比 springdoc-openapi 更与 feign 使用有关。使用 usingorg.springframework.cloud.openfeign.SpringQueryMap可以解决您的问题。

于 2020-08-02T12:46:40.050 回答