@FeignClient 的使用
作者:互联网
添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
启用Feign
@EnableFeignClients
使用示例:注可以作为调用三方接口的统一入口
@FeignClient(value = "base") //@FeignClient(name = "labelPrintClient", url = "${boton.printUrl}") //@FeignClient(name = ClientUrl.ELN_SERVICE,configuration = FeignConfig.class) public interface BaseFeignService { @GetMapping(value = "/user/name/{userId}") RestResponse<String> getUserName(@PathVariable Long userId); }
增加拦截方式1:
@Aspect @Component public class FeignInterceptor { @Around("@within(feign))") public Object around(ProceedingJoinPoint point, FeignClient feign) throws Exception { Object obj = null; try { obj = point.proceed(); } catch (Throwable e) { error( e.getMessage() , point, feign); } // 匹配并校验响应结果 checkResult( obj, point, feign); return obj; } public static void checkResult(Object obj,ProceedingJoinPoint point, FeignClient feign) throws Exception { if (null!=obj) { if(obj instanceof RestResponse){ RestResponse response = (RestResponse)obj; if(response.getCode()!=0){ error( response.getResult() , point, feign); } }else { JSONObject jsonObj = JSONUtil.parseObj(obj); Integer code = jsonObj.getInt("code"); if(code!=0){ error( jsonObj.get("result") , point, feign); } } } } /** api调用异常 / api正常响应:失败场景 */ public static void error(Object cause , ProceedingJoinPoint point, FeignClient feign) throws Exception { throw new Exception( new StringBuffer() .append(feign.value()).append(" 服务调用异常:").append(cause) .append(";Api方法名:").append(point.getSignature().getName()) .append(";Api参数:" ).append(ArrayUtil.toString(point.getArgs())) .toString() ); } }
增加拦截方式2:只有请求的拦截
@Configuration public class FeignConfig implements RequestInterceptor { @Override public void apply(RequestTemplate requestTemplate) { // 获取当前请求Spring信息 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); // 获取请求体 HttpServletRequest request = Objects.requireNonNull(attributes).getRequest(); // 获取Header、或参数等 String token = request.getHeader("Authorization"); //添加token requestTemplate.header("Authorization",token); } }
标签:FeignClient,feign,obj,point,使用,public,append 来源: https://www.cnblogs.com/cc-cf/p/16656119.html