Java中FeignClient发送请求时参数的传递归纳总结

本文详细介绍了在FeignClient中如何通过配置类传递请求头中的token,以及在GET和POST请求中如何正确传递不同类型的参数,包括单个引用类型、JavaBean、Map和List等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 首先说说FeignClient发送请求时如何传递header中的值

         1.1 创建配置类在使用RequestTemplate对象之前对header里面的内容进行赋值,也就是需要传递的请求头内容,具体如下:

package com.dimp.mobile.report.feign.config;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.http.HttpHeaders;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;

/**
 * @author  longmaolin
 * @description 解决feign组件来调用服务之间传递token问题
 * @createTime  2020/06/11
 */
public class FeignConfig implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        //仅仅添加token,和下面的逻辑代码二选其一
        requestTemplate.header(HttpHeaders.AUTHORIZATION, request.getHeader(HttpHeaders.AUTHORIZATION));
//传递get请求参数到request对象
        String userId = (String) request.getAttribute(AppContextConstant.USER_ID);
        if (StringUtils.isNotBlank(userId)) {
            requestTemplate.query(AppContextConstant.USER_ID, userId);
        }

//        //传递header里面所有内容
//        Enumeration<String> headerNames = request.getHeaderNames();
//        if (headerNames != null) {
//            while (headerNames.hasMoreElements()) {
//                String name = headerNames.nextElement();
//                String values = request.getHeader(name);
//                requestTemplate.header(name, values);
//            }
//        }

    }
}

  1.2 其次在具体的FeignClient接口中配置一下configuration属性为刚才编写的配置类即可

@FeignClient(name = "report", configuration = FeignConfig.class)
public interface ReportFeign {

    @RequestMapping("/report/comment/organizationTree")
    public ResultDTO getOrganizationOfUsers();  //获取默认组织维度树
}

2.get和post请求中对于传递单个引用类型的参数

    比如String,Integer....用@RequestParam("参数的别名")注解,括号中一定要有值(参数的别名)。调用方需要加注解,被调用方不需要加,被调用方的参数名和调用方的别名保持一致即可。

3.post请求中对于javaBean,map,list类型的参数的传递

   调用方不需要加注解,被调用方加上@RequestBody()注解即可.

4..参数位于路径中,例如:comment/{id}/users

   调用方需要通过@RequestParam("参数的别名")注解指定别名,被调用方需要加上注解@PathVariable()即可,如果被调用方参数名称没有和调用方别名保持一致,需要在PathVariable注解中设置和调用方一致的别名。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茂林修竹丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值