@FeignClient 情况下header的传递方法,RestTemplate情况下Header传递方法
程序员文章站
2022-05-15 12:36:31
今天因为要调用另一个服务,因为我们用的是SpringCloud框架,所以通过Fegin调用,正好另一方服务有权限校验,需要传递token和设备ID,这两个参数都需要放到Header中, 用 @RequestHeader 这个注解实现,可以看到下面两个服务的代码, 我的是三个参数,另一方服务是一个参数 ......
今天因为要调用另一个服务,因为我们用的是springcloud框架,所以通过fegin调用,正好另一方服务有权限校验,需要传递token和设备id,这两个参数都需要放到header中,
用 @requestheader 这个注解实现,可以看到下面两个服务的代码, 我的是三个参数,另一方服务是一个参数,实际上另一方服务接口方法所在的类上有个@iampermissions注解,就是用来拦截用的,所以虽然参数个数不一致,但是@requestheader注解只是在header里,我刚开始还挺迷惑的,事实上这样是可行的,一个是放在body里,一个是header里。
我的服务的代码:
@feignclient("xxx-xxx-xxx") public interface compensationorderservice { /** * 下单 * @param form * @return */ @postmapping(value = "/xxx-xxx-xxx/v1-0/xxx/xxxx") @responsebody result addorders(@valid @requestbody orderform form, @requestheader(value = "x-chj-token")string token, @requestheader(value = "x-chj-deviceid")string deviceid);
另一方服务接口代码:
@apioperation("下订单") @postmapping("/orders") @apiresponses({ @apiresponse(code = musiccode.music_vip_product_not_exist_code, message = musiccode.music_vip_product_not_exist_desc), @apiresponse(code = musiccode.music_vip_order_code_is_repeat_code, message = musiccode.music_vip_order_code_is_repeat_desc)} ) public result<string> addorders(@valid @requestbody orderform form) {
另一个是使用注入resttemplate ,创建httpheaders 对象, 写入header信息, 调用 postforentity即可
@service @allargsconstructor public class demoservice { @autowired private resttemplate resttemplate; 中间代码省略。。。。。。。。。。。 public sendvo sendmessage(){ httpheaders headers = new httpheaders(); headers.setcontenttype(mediatype.application_json_utf8); headers.set("authorization",send_token); headers.set("accept","application/json"); map<string,object> map = new hashmap<string, object>(2); map<string, object> mapjson = new hashmap<string, object>(7); mapjson.put("type","oa"); mapjson.put("title","title,钉钉推送消息demo测试完成,哈哈哈"); mapjson.put("content",",钉钉推送消息demo测试完成,content-哈哈哈"); mapjson.put("link","https://www.lixiang.com"); mapjson.put("userid","dongpengju|chenwei"); mapjson.put("mobile","13522396988"); mapjson.put("need_sso",true); mapjson.put("in_dingding",true); map.put("message",arrays.aslist(mapjson)); map.put("source","umu"); httpentity httpentity = new httpentity(map,headers); responseentity<sendvo> postforentity = this.resttemplate.postforentity(send_url,httpentity, sendvo.class); return postforentity.getbody(); } }
上一篇: CDR辅助线显示和隐藏的三种方法