@FeignClient 情况下header的传递方法,RestTemplate情况下Header传递方法

        今天因为要调用另一个服务,因为我们用的是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();
    }

}

 

转载于:https://www.cnblogs.com/fenglangjuxu/p/11055265.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@FeignClient是一个Spring Cloud提供的注解,用于声明一个Feign客户端。Feign是一个声明式、模板化的HTTP客户端,用于简化HTTP API的调用。 @FeignClient标签的常用属性如下: - name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现。 - url: url一般用于调试,可以手动指定@FeignClient调用的地址。 - decode404: 当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException。 - configuration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract。 - fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口。 - fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码。 - path: 定义当前FeignClient的统一前缀,当我们项目中配置了server.context-path,server.servlet-path时使用。 在使用@FeignClient时,需要在启动类上添加@EnableFeignClients注解来开启Feign的远程调用。同时,还需要在Feign客户端的接口上使用@FeignClient注解来指定远程服务的名称以及其他属性。例如: ```java @FeignClient(name="custorm", fallback=Hystrix.class) public interface IRemoteCallService { @RequestMapping(value="/custorm/getTest", method=RequestMethod.POST) @Headers({"Content-Type: application/json;charset=UTF-8"}) List<String> test(@RequestParam("names") String[] names); } ``` 以上代码示例中,通过@FeignClient注解指定了远程服务名称为"custorm",并定义了一个名为"test"的方法,用于调用远程接口。该方法使用了@Header注解来设置请求头信息,并且使用了@RequestParam注解来传递参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值