使用Feign @RequestLine添加解码器斜线

时间:2018-10-31 19:07:20

标签: java yaml okhttp3 rest-client feign

我当前正在使用YAML文件通过swagger插件生成模型和API客户端,并且正在使用Feign OkHttpClient向API发出请求,这里的问题是客户端对URL进行了编码,但忽略了斜杠),API调用将失败。是否可以在客户端中添加decodeSlash参数?还是可以使用拦截器来实现?

这是我遇到此问题的示例路径参数。 QgKuK2DU/0%3D应该在QgKuK2DU%2F0%3D

的位置

2 个答案:

答案 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-plugintemplateDirectory添加到<configuration>块中:

<templateDirectory>src/main/resources/Java/libraries/feign</templateDirectory>