十、声明式 REST 客户端-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 请求中

二、 自定义配置

package com.comsys.configuration;

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 共用,会覆盖。

三、 日志配置

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

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

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

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

四、 契约配置
1、在配置类里面添加以下代码

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

2、修改 IuserBiz 类

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

五、 支持压缩

# 开启压缩 
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 

六、 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 wujing 
 */ 
@FeignClient(value = "drunck", url = "www.drunck.com") 
public interface IdrunckBiz { 
@RequestMapping(value = "/{url}", method = RequestMethod.GET) 
String get(@PathVariable(name = "url") String url); 

} 

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

七、 支持继承
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; 

import com.drunck.education.bean.User; 
import com.drunck.education.service.UserService; 

/** 
 * @author wujing 
 */ 
@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("无境 1"); 

 user.setCreateTime(new Date()); 

 logger.info("请求接口返回:{}", user); 

 return user; 

} 
} 

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

public interface IUserBiz extends UserService{ 
 // … 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值