之前用HttpClient实现了rest代理(自定义rest代理(一)),从网上看了下资料,同时针对公司已有的框架做了一些封装和改造。用Retrofit2另外实现了一套rest代理工具包。其中基本都是都是基于Retrofit2,自己又做了一层简单的封装。

源码在我的GitHub上:https://github.com/mx-go/retrofit-rest-proxy

Spring配置

引入Maven坐标

1
2
3
4
5
<dependency>
<groupId>com.github.mx-go</groupId>
<artifactId>retrofit-rest-proxy</artifactId>
<version>1.0.0</version>
</dependency>

applicationContext.xml文件中加入配置

1
2
3
4
5
6
7
8
9
<bean id="retrofitFactory" class="com.github.proxy.core.ConfigRetrofitSpringFactory"
p:configLocation="classpath*:rest-proxy.json,classpath*:rest-proxy1.json" init-method="init"/>

// 可针对不同接口配置多个
<bean id="sendHttp" class="com.github.proxy.RetrofitSpringFactoryBean"
p:type="com.max.open.SendHttp" p:factory-ref="retrofitFactory"/>

<bean id="xxx" class="com.github.proxy.RetrofitSpringFactoryBean"
p:type="com.max.open.xxx" p:factory-ref="retrofitFactory"/>

其中参数:

  • configLocation:配置文件所在路径。支持多个配置文件路径,以英文**,**隔开。
  • type:接口所在的路径。

基础配置

针对Spring配置中的configLocation有配置中心可修改源码从配置中心获取。以下举个例子:

rest-proxy.json

1
2
3
4
5
6
7
8
9
10
11
{
"sendHttp": {
"domain": "http://localhost:8081",
"desc": "测试使用",
"readTimeout": "10000",
"connectTimeout": "10000"
},
"test1": {
"domain": "127.0.0.1:8080"
}
}

配置中可以存在多个KV。

  • domain:HTTP请求的基础域名,同时可指定为IP地址。必填。
  • desc:功能描述,无其他用处。
  • readTimeout:读取超时时间(ms)。对应Retrofit2中的readTimeout。缺省5000ms。
  • connectTimeout:连接超时时间(ms),对应Retrofit2中的connectTimeout。缺省5000ms。

接口

示例中用的是SendHttp测试接口:

1
2
3
4
5
6
7
8
9
10
@RetrofitConfig(value = "sendHttp", desc = "测试")
public interface SendHttp {

@POST("/callback")
Student getResult(@Body Student student);

// 返回为void类型时需写为Void
@POST("/update")
Void update(@Body Student student);
}

重点说一下**@RetrofitConfig**注解。此注解为自定义注解,其中:

  • value:对应的是基础配置中的Key。
  • desc:描述。

其余注解和使用与retrofit2一致,使用retrofit2中注解即可。

使用

service层或manager层直接注入配置完成的所需接口:

1
2
@Autowired
private SendHttp sendHttp;