OpenFeign曾用名Netflix Feign,最新版本是2018.5釋出的9.7.0。
OpenFeign是Java應用中編寫Web服務的用戶端的利器,基于第三方HTTP用戶端類庫,聲明式地建構Web服務的用戶端應用,以調用Web服務。OpenFeign在Java應用中,負責處理與遠端Web服務的請求響應,最大限度降低編碼複雜性。
1. HTTP用戶端類庫
OpenFeign預設使用Java的HttpURLConnection作為HTTP請求用戶端。
OpenFeign也可以使用類似Jersey/CXF的HTTP用戶端類庫,編寫Java用戶端以通路HTTP服務。
OpenFeign也可以直接使用已有公共第三方HTTP用戶端類庫,如Apache HttpComponents, OKHttp,編寫Java用戶端以通路HTTP服務。
2. JSON編解碼類庫
OpenFeign可以采用支援Jackson, Gson兩種JSON編解碼類庫,JSON編解碼用法如下:
Feign.builder().encoder(new GsonEncoder())
Feign.builder().decoder(new GsonDecoder())
Feign.builder().encoder(new JacksonEncoder())
Feign.builder().decoder(new JacksonDecoder())
3. XML編解碼類庫
OpenFeign支援JAXB規範的XML編解碼類庫,用法如下:
Feign.builder().encoder(new JAXBEncoder())
Feign.builder().decoder(new JAXBDecoder())
4. 內建Apache HttpComponents HttpClient
Feign.builder().client(new ApacheHttpClient())
5. 內建OKHttp
Feign.builder().client(new OkHttpClient()).target(...)
6. 內建Ribbon
Feign.builder().client(RibbonClient.create()).target(...)
7. 內建Hystrix
HystrixFeign.builder().target(...)
8. 應用示例
1) 在Java應用中定義遠端HTTP服務接口
public interface BaiduService {
@RequestLine("GET /{owner}/editors/{lastName}")
List<Editor> editors(@Param("owner") String owner, @Param("lastName") String lastName);
}
2) 在Java應用中定義對象模型
隻需要給出屬性
public class Editor {
String name;
}//a model, no constructor, no getter/setter
3) 在Java應用中定義HTTP服務對象,并發出HTTP請求
BaiduService server = Feign.builder()
.decoder(new GsonDecoder())
.target(BaiduService.class, "https://www.baidu.com");
List<Editor> editorsHan = server.editors("champagne", "Han");
參考連結:
https://github.com/OpenFeign/feign