欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

@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();
    }

}