Java中FeignClient发送请求时参数的传递

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

  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;
 
/**
 * @description 解决feign组件来调用服务之间传递token问题
 */
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. 其次在具体的FeignClient接口中配置一下configuration属性为刚才编写的配置类即可
@FeignClient(name = "report", configuration = FeignConfig.class)
public interface ReportFeign {
 
    @RequestMapping("/report/comment/organizationTree")
    public ResultDTO getOrganizationOfUsers();  //获取默认组织维度树
}

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

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

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

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

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

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

posted on   何苦->  阅读(663)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示