我当前正在使用YAML文件通过swagger插件生成模型和API客户端,并且正在使用Feign OkHttpClient向API发出请求,这里的问题是客户端对URL进行了编码,但忽略了斜杠),API调用将失败。是否可以在客户端中添加decodeSlash
参数?还是可以使用拦截器来实现?
这是我遇到此问题的示例路径参数。 QgKuK2DU/0%3D
应该在QgKuK2DU%2F0%3D
答案 0 :(得分:0)
decodeSlash
只能通过@RequestLine
注释设置。如果您无权访问注释,则需要使用uri
替换RequestInterceptor
。
答案 1 :(得分:0)
如果您使用openapi-generator,则可以自己modify the templates(也称为here)添加decodeSlash
参数:
git clone https://github.com/openapitools/openapi-generator
cd openapi-generator
git checkout v4.2.0 # The Version Tag you are actually using
cd modules/openapi-generator/src/main/resources/Java/libraries/feign/
cp api.mustache <your_local_project>/src/main/resources/Java/libraries/feign
在api.mustache
中更改@RequestLine
的2种外观:
- @RequestLine("{{httpMethod}} {{{path}}}{{#hasQueryParams}}?{{/hasQueryParams}}{{#queryParams}}{{baseName}}={{=<% %>=}}{<%paramName%>}<%={{ }}=%>{{#hasMore}}&{{/hasMore}}{{/queryParams}}")
+ @RequestLine(value="{{httpMethod}} {{{path}}}{{#hasQueryParams}}?{{/hasQueryParams}}{{#queryParams}}{{baseName}}={{=<% %>=}}{<%paramName%>}<%={{ }}=%>{{#hasMore}}&{{/hasMore}}{{/queryParams}}", decodeSlash = false)
- @RequestLine("{{httpMethod}} {{{path}}}?{{#queryParams}}{{baseName}}={{=<% %>=}}{<%paramName%>}<%={{ }}=%>{{#hasMore}}&{{/hasMore}}{{/queryParams}}")
+ @RequestLine(value="{{httpMethod}} {{{path}}}?{{#queryParams}}{{baseName}}={{=<% %>=}}{<%paramName%>}<%={{ }}=%>{{#hasMore}}&{{/hasMore}}{{/queryParams}}", decodeSlash = false)
使用openapi-generator-maven-plugin
将templateDirectory
添加到<configuration>
块中:
<templateDirectory>src/main/resources/Java/libraries/feign</templateDirectory>