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);
}
}