Feign Client请求参数,请求头部,全局请求头部设置

时间:2025-04-26 14:25:40

Feign Client 请求第三方数据接口:

其中,fallback和fallbackFactory不可同时使用,只能使用其中一种属性

/**
 * 使用feign,调用第三方应用接口信息
 * 多种请求方式,全局设置请求头
 */
@Component
@FeignClient(name = "braodcast",url = "${}",configuration = FeignConfiguration.class,fallback = FeignFallback.class)
public interface BroadcastFeign {

	/**
     * 请求第三方接口
     * 第三方接口格式为(http://127.0.0.1:8080/xxx/abc?pageNum=?&pageSize=?&name=?)
     * @param pageNum
     * @param pageSize
     * @param headerMap 请求头部信息
     * @return
     */
    @GetMapping(value = "/xxx/abc")
    public JSONObject findDeviceList(
            @RequestParam(value = "pageNum")Integer pageNum,
            @RequestParam(value = "pageSize")Integer pageSize,
            @RequestHeader Map headerMap);

	/**
	* 请求头部直接在postMapping中指定
	* 请求格式(http://127.0.0.1:8080/xxx/abc)
	*/
	@PostMapping(value = "/xxx/abc",consumes = "application/json;charset=UTF-8")
    public JSONObject getById(@RequestBody Map map);

	/**
	* 请求头部由自己设置
	* 请求格式(http://127.0.0.1:8080/xxx/abc/{id}/{name})
	*/
	@GetMapping(value = "/xxx/abc/{id}/{name}")
	public JSONObject getById(
			@PathVariable(value = "id")Integer id,
			@PathVariable(value = "name")String name,
			@RequestHeader Map headerMap)
}

设置全局请求头部信息

/**
 * 设置feign client 全局请求头部
 * feign client 需要设置configuration属性
 * 使用@configuration 注解
 */
@Configuration
public class FeignConfiguration {

    @Value("${}")
    private String token;

    @Bean
    public RequestInterceptor requestInterceptor(){
        return new RequestInterceptor() {
            @Override
            public void apply(RequestTemplate requestTemplate) {
                //List<String> accessToken = ("Bearer "+token);
                List<String> contentTypeList = Lists.newArrayList("application/x-www-form-urlencoded");
                //Map<String, Collection<String>> headers = ("Authorization", accessToken,"Content-Type", contentTypeList);
                Map<String, Collection<String>> headers = ImmutableMap.of("Content-Type", contentTypeList);
                requestTemplate.headers(headers);
            }
        };
    }
}

自定义容错处理

/**
 * 必须实现FeignClient对应接口信息
 */
@Component
public class FeignFallback implements BroadcastFeign{

    @Override
    public JSONObject findDeviceList(Integer pageNum, Integer pageSize, Map headerMap) {
        //TODO 请求出错,或请求超时时,自定义错误提示
        return null;
    }
}

/**
 * fallback升级版fallbackFactory
 */
@Component
public class FeignFallBackFactory implements FallbackFactory<BroadcastFeign> {

    @Override
    public BroadcastFeign create(Throwable throwable) {
        return new BroadcastFeign() {
            @Override
            public JSONObject findDeviceList(Integer pageNum, Integer pageSize, Map headerMap) {
            	//TODO 可自定义方法,或自定义连接失败后,需要处理的操作
                return null;
            }
        };
    }

}

启动类


@SpringBootApplication
@EnableFeignClients(basePackages = {""})
public class Application {

	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}