我在春云中使用假装,我遇到了问题。
这是我的假装客户端。
@FeignClient("food-service")
public interface FoodService {
@RequestMapping(value = {"/food"},method = {RequestMethod.GET})
List<Food> find(@RequestParam("name") String name);
}
foodService.find("{co%%");
此调用将返回状态码400。
然后我查看代码,并在RequestTemplate类中找到了这段代码:
private String encodeIfNotVariable(String in) {
if (in == null || in.indexOf('{') == 0) {
return in;
}
return urlEncode(in);
}
查询中调用的方法encodeIfNotVariable
(String name,String ... values)。
这意味着如果包含{
的值并且在第一个值中,则无法对该值进行编码。
我该如何解决这个问题?
答案 0 :(得分:0)
字符{是unsafe character,因此您必须对其进行编码:
由于多种原因,角色可能不安全。 ....
.... [缺少部分] ....
其他字符不安全,因为已知网关和其他传输代理有时会修改此类字符。这些字符是&#34; {&#34;,&#34;}&#34;,&#34; |&#34;,&#34; \&#34;,&#34; ^&# 34;,&#34;〜&#34;,
&#34; [&#34;,&#34;]&#34;和&#34;`&#34;。所有不安全的字符必须始终在URL中编码。例如,角色&#34;#&#34;必须在URL中编码,即使在通常不处理片段或锚标识符的系统中也是如此,因此如果将URL复制到另一个使用它们的系统中,则无需更改URL编码。
总之,字符{
必须编码为%7B
:
foodService.find("%7Bco%%");
更多信息:
否则,feign-netflix使用{和}来放置变量,然后用带@Param("name")
注释的参数params替换它,但是你正在使用spring impl,如果需要它就可以为你做。