关于原生feign发起请求时,参数注解的相关问题

先说结论:
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用于路径变量传递见之前的博客路径变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值