背景
在开发的过程中发现,在使用Feign的时候,使用@GetMapping(“/user”)的时候,日志打印出来确实发送了POST请求。
解决方案
GET请求多参数URL
方法一(推荐)
推荐使用@SpringQueryMap,可以把多个参数包装成对象,没有值的时候默认为null。
@FeignClient(“/user”)
public interface UserFeignClient {
@GetMapping("/get")
public User get(@SpringQueryMap User user);
}
方法二(推荐)
@FeignClient(name = “/user”)
public interface UserFeignClient {
@GetMapping(“/get”)
public User get1(@RequestParam(“id”) Long id, @RequestParam(“username”) String username);
}
这是最为直观的方式,URL有几个参数,Feign接口中的方法就有几个参数。使用@RequestParam注解指定请求的参数是什么。 缺点:参数多的时候,导致方法参数过多。
方法三(不推荐)
多参数的URL也可使用Map来构建。当目标URL参数非常多的时候,可使用这种方式简化Feign接口的编写。
@FeignClient(name = “microservice-provider-user”)
public interface UserFeignClient {
@GetMapping(“/get”)
public User get2(@RequestParam Map<String, Object> map);
}
在调用时,可使用类似以下的代码。
注意:这种方式不建议使用。主要是因为可读性不好,而且如果参数为空的时候会有一些问题,例如map.put(“username”, null);
会导致microservice-provider-user
服务接收到的username
是""
,而不是null
。
总结
在参数比较少的时候,建议使用@RequestParam
,比较直观。在参数超过3个的时候,建议使用
@SpringQueryMap
封装成对象。