举个例子:
服务A提供了如下接口(注意这里的参数url是一个地址):
@GetMapping("/getSample") public String getSample(@RequestParam String url){ //此处省略逻辑...... }
服务B需要调用服务A的接口,调用如下:
sampleFeignClient.getSample("http://www.xxx.com?name=dumas&age=18");
提出问题:此时调用服务A接口后,在A服务接收的方法体内,断点会发现后面的参数age=18
会丢失。
问题的原因:Feign远程调用是使用HTTP协议的,可能是获取参数的时候,把参数url
里面的内容当成了参数,所以直接舍弃了。
解决方法:
- 服务B调用前,使用
URLEncoder.encode(url,"UTF-8")
; - 服务A获取参数后,使用
URLDecoder.decode(url, "UTF-8");
本文完!