ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-08-22 14:35:00  阅读:154  来源: 互联网

标签:FeignClient 调用 Java request 别名 发送 参数 注解 import


首先说说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注解中设置和调用方一致的别名。

标签:FeignClient,调用,Java,request,别名,发送,参数,注解,import
来源: https://www.cnblogs.com/fuqian/p/16612648.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有