最近对单体项目进行服务化改造,使用feign作为声明式http接口客户端工具,但在使用GET方式时有些疑问:
客户端代码:
@RequestLine("GET /users")
public List<User> list(UserDto user);
服务端代码
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<User> list(@RequestBody User user) {
return userService.getList(user);
}
feign分别尝试了Java原生URLConnection,OkHttp,ApacheHttpClient三种方式:
1.URLConnection报405错误,说明http方法不对,但是feign配置是GET方法,查feign的日志也是用的GET方法。后来发现原因是URLConnection在的原因:对于有request body的GET方法,自动改为POST方法了。
2.OkHttp直接报错:method GET must not have a request body.
3.ApacheHttpClient完美支持。
问题来了:从HTTP协议本身,没有要求GET方法一定要用url这样的传参方式,也可以用request body的。
为什么html的form表单默认将Get方法的参数请到url,而不是requety body?
为什么URLConnection将有request body的GET请求转为POST?
为什么OkHttp不支持Get方法有request body?
另外为了rest风格,所有查询接口都是GET的,用ApacheHttpClient也是可以的。目前还没有迭代到生产环境,这样做不知道会不会有问题。
求教各位,谢谢!
添加回答
举报
0/150
提交
取消