• SpringCloud学习笔记(10)----Spring Cloud Netflix之声明式 REST客户端 -Feign的高级特性


    1. Feign的默认配置

      Feign 的默认配置 Spring Cloud Netflix 提供的默认实现类:FeignClientsConfiguration 

      解码器:Decoder feignDecoder: ResponseEntityDecoder (which wraps a SpringDecoder) 

      编码器:Encoder feignEncoder: SpringEncoder 

      日志框架:Logger feignLogger: Slf4jLogger
      契约:Contract feignContract: SpringMvcContract
      生成器:Feign.Builder feignBuilder: HystrixFeign.Builder
      说明: 

      解码器的作用:将 HTTP 响应数据反序列化为 Java 对象 
      编码器的作用:将方法签名中方法参数对象序列化为请求参数放到 HTTP 请求中

    2. 自定义配置

      

     
    import org.springframework.context.annotation.Bean;
    
    import feign.Contract;
    import feign.Logger;
    
    //@Configuration
    public class RcFeignConfiguration {
        @Bean
        public Logger.Level feignLoggerLevel() {
            return feign.Logger.Level.FULL;
        }
    
        /*@Bean
        public Contract feignContract() {
            return new feign.Contract.Default();
        }*/
    }
     

    配置@ FeignClient注解

      @FeignClient(value = "spring-cloud-provider", configuration = RcFeignConfiguration.class)

      说明:若配置文件被 SpringContext 扫描,则会被@ FeignClien 共用,会覆盖。

    3. 日志配置

    # 日志配置,默认是不打印任何的日志 
    logging.level.com.drunck.education.feign.IUserBiz=debug

    需要在配置类里面添加以下代码:

    @Bean
        public Logger.Level feignLoggerLevel() {
            return feign.Logger.Level.FULL;
        }

      说明:四种级别 
      NONE:默认,不打印任何日志 
      BASIC:打印请求方法和 URL,和请求返回状态码和执行时间。 
      HEADERS:打印请求和返回的头部信息。 
      FULL:打印以上的全部信息。

    4. 契约配置

      在配置类里面添加以下代码

    @Bean 
    public Contract feignContract() { 
     return new feign.Contract.Default(); 
    }

      修改 IuserBiz 类

    @RequestLine("GET /api/user/{id}") 
    String view1(@Param(value = "id") int id); 

    5. 支持压缩

     
    # 开启压缩 
    feign.compression.request.enabled=true 
    feign.compression.response.enabled=true 
    # 更多配置 
    feign.compression.request.mime-types=text/xml,application/xml,application/json 
    feign.compression.request.min-request-size=2048 
     

    6. URL属性

      

     
    import org.springframework.cloud.netflix.feign.FeignClient; 
    import org.springframework.web.bind.annotation.PathVariable; 
    import org.springframework.web.bind.annotation.RequestMapping; 
    import org.springframework.web.bind.annotation.RequestMethod; 
    
    /** 
     * @author 
     */ 
    @FeignClient(value = "baidu", url = "www.baidu.com") 
    public interface IdrunckBiz { 
    @RequestMapping(value = "/{url}", method = RequestMethod.GET) 
    String get(@PathVariable(name = "url") String url); 
    
    } 
     

      说明:定义了 url 之后,vaule 为必选值,这时的 value 只是一个标识。

    7. 支持继承

      1、定义一个普通接口

     
    public interface UserService { 
    
    
    @RequestMapping(method = RequestMethod.GET, value = "/api/user/find/{id}") 
    
    User find(@PathVariable(value = "id") int id); 
    } 
     

      2 、实现接口

     
    import java.util.Date; 
    
    import org.slf4j.Logger; 
    import org.slf4j.LoggerFactory; 
    import org.springframework.web.bind.annotation.PathVariable; 
    import org.springframework.web.bind.annotation.RestController; 
    /** 
     * @author*/ 
    @RestController 
    public class FeignApiUserController implements UserService { 
    
    
    protected final Logger logger = LoggerFactory.getLogger(this.getClass()); 
    
    
    @Override 
    
    public User find(@PathVariable int id) { 
    
     User user = new User(); 
    
     user.setId(id); 
    
     user.setName("张三"); 
    
     user.setCreateTime(new Date()); 
    
     logger.info("请求接口返回:{}", user); 
    
     return user; 
    
    } 
    } 
     

      说明:springmvc 里面不支持方法参数映射的继承 

      3、继承

      

    public interface IUserBiz extends UserService{ 
     // … 
    } 

    原文 SpringCloud学习笔记(10)----Spring Cloud Netflix之声明式 REST客户端 -Feign的高级特性

  • 相关阅读:
    Eclipse打jar包的方法
    Eclipse中SVN插件的安装
    无法远程访问 MySql Server
    TCP(Socket基础编程)
    安装淘宝镜像cnpm时出现问题及解决方案
    搭建vue脚手架---vue-cli
    padding和margin设置成百分比
    响应式布局
    响应式网页:用em,rem设置网页字体大小自适应
    url两次编码
  • 原文地址:https://www.cnblogs.com/xiaoshen666/p/10844187.html
Copyright © 2020-2023  润新知