在SpringBoot
项目直接使用okhttp
、httpClient
或者RestTemplate
发起HTTP
请求,既繁琐又不方便统一管理。因此,在这里推荐一个适用于SpringBoot
项目的轻量级HTTP客户端框架retrofit-spring-boot-starter,使用非常简单方便,同时又提供诸多功能增强。目前项目已经更新至2.2.2
版本,并且会持续进行迭代优化。
项目地址:https://github.com/LianjiaTech/retrofit-spring-boot-starter
前言
Retrofit
是适用于Android
和Java
且类型安全的HTTP客户端,其最大的特性的是支持通过接口
的方式发起HTTP请求。而spring-boot
是使用最广泛的Java开发框架,但是Retrofit
官方没有支持与spring-boot
框架快速整合,因此我们开发了retrofit-spring-boot-starter
。
retrofit-spring-boot-starter
实现了Retrofit
与spring-boot
框架快速整合,并且支持了诸多功能增强,极大简化开发。
🚀项目持续优化迭代,欢迎大家提ISSUE和PR!麻烦大家能给一颗star✨,您的star是我们持续更新的动力!
功能特性
快速使用
引入依赖
<dependency>
<groupId>com.github.lianjiatech</groupId>
<artifactId>retrofit-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
定义http接口
接口必须使用@RetrofitClient
注解标记!http相关注解可参考官方文档:retrofit官方文档。
@RetrofitClient(baseUrl = "${test.baseUrl}")
public interface HttpApi {
@GET("person")
Result<Person> getPerson(@Query("id") Long id);
}
注入使用
将接口注入到其它Service中即可使用!
@Service
public class TestService {
@Autowired
private HttpApi httpApi;
public void test() {
// 通过httpApi发起http请求
}
}
HTTP请求相关注解
HTTP
请求相关注解,全部使用了retrofit
原生注解。详细信息可参考官方文档:retrofit官方文档,以下是一个简单说明。
注解分类 | 支持的注解 |
---|---|
请求方式 | @GET @HEAD @POST @PUT @DELETE @OPTIONS |
请求头 | @Header @HeaderMap @Headers |
Query参数 | @Query @QueryMap @QueryName |
path参数 | @Path |
form-encoded参数 | @Field @FieldMap @FormUrlEncoded |
文件上传 | @Multipart @Part @PartMap |
url参数 | @Url |
配置项说明
retrofit-spring-boot-starter
支持了多个可配置的属性,用来应对不同的业务场景。您可以视情况进行修改,具体说明如下:
配置 | 默认值 | 说明 |
---|---|---|
enable-log | true | 启用日志打印 |
logging-interceptor | DefaultLoggingInterceptor | 日志打印拦截器 |
pool | 连接池配置 | |
disable-void-return-type | false | 禁用java.lang.Void返回类型 |
retry-interceptor | DefaultRetryInterceptor | 请求重试拦截器 |
global-converter-factories | JacksonConverterFactory | 全局转换器工厂 |
global-call-adapter-factories | BodyCallAdapterFactory,ResponseCallAdapterFactory | 全局调用适配器工厂 |
enable-degrade | false | 是否启用熔断降级 |
degrade-type | sentinel | 熔断降级实现方式(目前仅支持Sentinel) |
resource-name-parser | DefaultResourceNameParser | 熔断资源名称解析器,用于解析资源名称 |
yml
配置方式:
retrofit:
enable-response-call-adapter: true
# 启用日志打印
enable-log: true
# 连接池配置
pool:
test1:
max-idle-connections: 3
keep-alive-second: 100
test2:
max-idle-connections: 5
keep-alive-second: 50
# 禁用void返回值类型
disable-void-return-type: false
# 日志打印拦截器
logging-interceptor: com.github.lianjiatech.retrofit.spring.boot.interceptor.DefaultLoggingInterceptor
# 请求重试拦截器
retry-interceptor: com.github.lianjiatech.retrofit.spring.boot.retry.DefaultRetryInterceptor
# 全局转换器工厂
global-converter-factories:
- retrofit2.converter.jackson.JacksonConverterFactory
# 全局调用适配器工厂
global-call-adapter-factories:
- com.github.lianjiatech.retrofit.spring.boot.core.BodyCallAdapterFactory
- com.github.lianjiatech.retrofit.spring.boot.core.ResponseCallAdapterFactory
# 是否启用熔断降级
enable-degrade: true
# 熔断降级实现方式
degrade-type: sentinel
# 熔断资源名称解析器
resource-name-parser: com.github.lianjiatech.retrofit.spring.boot.degrade.DefaultResourceNameParser
高级功能
自定义注入OkHttpClient
通常情况下,通过@RetrofitClient
注解属性动态创建OkHttpClient
对象能够满足大部分使用场景。但是在某些情况下,用户可能需要自定义OkHttpClient
,这个时候,可以在接口上定义返回类型是OkHttpClient.Builder
的静态方法来实现。代码示例如下:
@RetrofitClient(baseUrl = "http://ke.com")
public interface HttpApi3 {
@OkHttpClientBuilder
static OkHttpClient.Builder okhttpClientBuilder() {
return new OkHttpClient.Builder()
.