编程语言
首页 > 编程语言> > Java中FeignClient发送请求时参数的传递

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

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