先说结论:
POST请求必须指定请求头,body参数用@RequestBody或者@Param(需要一个一个写)。
GET请求,传参只能用@QueryMap,后边变量是Map形式,哪怕是一个参数也必须放到map里边。如果是路径变量,用@Param,路径中用{变量名}占位,注解的value为变量名。
以上所有结论只针对于原生feign。
首先是post请求:
如果不设置请求头的话,默认的是stream流的body形式,一定要指定。
@RequestLine("POST /test/post")
@Headers({"Content-Type: application/json", "Accept: application/json"})
JSONObject post(@QueryMap Map<String,Object> param, @RequestBody Map<String,Object> body);
①post请求如果有url路径参数,请求方式如上,可以正常接收。
Map<String,Object> param = new HashMap<>();
param.put("query","ttttt");
Map<String,Object> body = new HashMap<>();
body.put("body","bbbb");
JSONObject pp = testClient.post(param,body);
接收方打印结果:
②其实body也可以用另一种写法:
@RequestLine("POST /test/post")
@Headers({"Content-Type: application/json", "Accept: application/json"})
JSONObject post2(@QueryMap Map<String,Object> param, @Param("query") String query,
@Param("happy")String happy);
调用代码:
Map<String,Object> param = new HashMap<>();
param.put("query","ttttt");
Map<String,Object> body = new HashMap<>();
body.put("body","bbbb");
JSONObject qq = testClient.post2(param,"body","everyday");
打印结果如下:
说明用@Param注解也是可以的。
二、对于GET请求,
测试了几种方法,@Param,@RequestParam,@QueryMap(不填map,填单个参数)
@RequestLine("GET /test/get")
JSONObject get(@QueryMap String query);
@RequestLine("GET /test/get")
JSONObject get2(@RequestParam("query") String query);
@RequestLine("GET /test/get")
JSONObject get3(@Param("query") String query);
调用:
JSONObject bb = testClient.get("getQuery");
JSONObject cc = testClient.get2("getQuery");
JSONObject dd = testClient.get3("getQuery");
发现都不行,找不到这个传递参数,信息如下:
目前发现想要传递参数只能用@QueryMap,然后参数用Map才行。
@Param用于路径变量传递见之前的博客路径变量