
引言
本篇介绍 flea-jersey 模块下的 flea-jersey-client 子模块,该模块提供对 flea-jersey-server 子模块封装的 POST
、PUT
、DELETE
和 GET
资源的调用。

1. 客户端依赖
项目内容可至GitHub 查看 flea-jersey-client
相关依赖如下:
1 2 3 4 5 6
| <dependency> <groupId>com.huazie.fleaframework</groupId> <artifactId>flea-jersey-client</artifactId> <version>2.0.0</version> </dependency>
|
2. 客户端接入步骤
- 客户端确定待调用的资源服务【参见 Flea RESTful接口服务端接入】,并配置资源客户端表;
- 客户端定义业务入参和业务出参
POJO
类;
- 客户端使用
FleaJerseyClient
调用资源服务。
3. 具体接入讲解
3.1 资源客户端配置
添加资源客户端【flea_jersey_res_client
】配置, 下载鉴权资源服务的资源客户端配置如下:

其中 flea_jersey_res_client
的表结构如下:
字段名 |
中文描述 |
client_code |
客户端编码 |
resource_url |
资源地址 |
resource_code |
资源编码 |
service_code |
服务编码 |
service_interfaces |
资源服务接口类 |
request_mode |
请求方式 |
media_type |
媒体类型 |
client_input |
客户端业务入参 |
client_output |
客户端业务出参 |
3.2 客户端业务输入和输出参数定义
下载鉴权业务输入对象,定义文件编号入参,代码如下:
1 2 3 4 5 6 7 8 9 10
| @Getter @Setter @ToString public class InputDownloadAuthInfo implements Serializable {
private static final long serialVersionUID = 6849188299874561970L;
private String fileId;
}
|
下载鉴权业务输出对象,定义下载鉴权令牌出参,代码如下:
1 2 3 4 5 6 7 8 9 10
| @Getter @Setter @ToString public class OutputDownloadAuthInfo implements Serializable {
private static final long serialVersionUID = 5689920399219551237L;
private String token;
}
|
这里定义的客户端业务入参【InputFileUploadInfo
】和 出参【OutputFileUploadInfo
】使用的是服务端定义的资源服务入参和出参;当然这里也可以不一样,原则上只需要客户端业务入参和资源服务入参,客户端业务出参和资源服务出参两边对象转 JSON 或 XML 的数据内容一致即可。
3.3 Flea Jersey客户端接入使用
3.3.1 FleaJerseyClient
FleaJerseyClient,即Flea Jersey 客户端,对外提供统一的Jersey接口客户端调用API。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| @Component public class FleaJerseyClient {
private static final FleaLogger LOGGER = FleaLoggerProxy.getProxyInstance(FleaJerseyClient.class);
private FleaConfigDataSpringBean springBean;
@Resource public void setSpringBean(FleaConfigDataSpringBean springBean) { this.springBean = springBean; }
public <T> Response<T> invoke(String clientCode, Object input, Class<T> outputClazz) throws CommonException {
Object obj = null; if (LOGGER.isDebugEnabled()) { obj = new Object() {}; LOGGER.debug1(obj, "Start"); }
StringUtils.checkBlank(clientCode, FleaJerseyClientException.class, "ERROR-JERSEY-CLIENT0000000001");
ObjectUtils.checkEmpty(input, FleaJerseyClientException.class, "ERROR-JERSEY-CLIENT0000000002");
ObjectUtils.checkEmpty(outputClazz, FleaJerseyClientException.class, "ERROR-JERSEY-CLIENT0000000003");
if (ObjectUtils.isEmpty(springBean)) { if (LOGGER.isErrorEnabled()) { LOGGER.debug1(new Object() {}, "未注入配置数据 Spring Bean,请检查"); } return null; }
FleaJerseyResClient resClient = springBean.getResClient(clientCode); ObjectUtils.checkEmpty(resClient, FleaJerseyClientException.class, "ERROR-JERSEY-CLIENT0000000009", clientCode);
RequestConfig config = new RequestConfig(); config.addClientCode(clientCode); config.addInputObj(input); config.addResourceUrl(resClient.getResourceUrl()); config.addResourceCode(resClient.getResourceCode()); config.addServiceCode(resClient.getServiceCode()); config.addRequestMode(resClient.getRequestMode()); config.addMediaType(resClient.getMediaType()); config.addClientInput(resClient.getClientInput()); config.addClientOutput(resClient.getClientOutput());
if (LOGGER.isDebugEnabled()) { LOGGER.debug1(obj, "Request Config = {}", config); }
Request request = RequestFactory.getInstance().buildFleaRequest(config); Response<T> response = null; if (ObjectUtils.isNotEmpty(request)) { response = request.doRequest(outputClazz); }
if (LOGGER.isDebugEnabled()) { LOGGER.debug1(obj, "Response = {}", response); LOGGER.debug1(obj, "End"); }
return response; }
}
|
它的 invoke
方法实现调用资源服务的逻辑如下;
首先,根据客户端编码获取 Flea Jersey 接口客户端配置【flea_jersey_res_client
】;
然后,根据 Flea Jersey 接口客户端配置构建通用的请求配置;
接着,传入请求配置,让请求工厂生产一个 Flea Jersey 请求;
最后,执行 Flea Jersey 请求。
3.3.2 Post 请求
从 3.1 中可以看到下载鉴权资源服务的请求方式是 Post
,也就是说,在上述请求工厂生产 Flea Jersey 请求中,它会生产一个 Post 请求 ,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
public class PostFleaRequest extends FleaRequest {
private static final FleaLogger LOGGER = FleaLoggerProxy.getProxyInstance(PostFleaRequest.class);
public PostFleaRequest() { }
public PostFleaRequest(RequestConfig config) { super(config); }
@Override protected void init() { modeEnum = RequestModeEnum.POST; }
@Override protected FleaJerseyResponse request(WebTarget target, FleaJerseyRequest request) throws CommonException {
Object obj = null; if (LOGGER.isDebugEnabled()) { obj = new Object() {}; LOGGER.debug1(obj, "POST Request, Start"); }
Entity<FleaJerseyRequest> entity = Entity.entity(request, toMediaType());
FleaJerseyResponse response = target.request(toMediaType()).post(entity, FleaJerseyResponse.class);
if (LOGGER.isDebugEnabled()) { LOGGER.debug1(obj, "POST Request, FleaJerseyResponse = {}", response); LOGGER.debug1(obj, "POST Request, End"); } return response; } }
|
3.3.3 接入自测
经过3.1和3.2的步骤,客户端接入已经完成一半,下面就可以通过 FleaJerseyClient
调用资源服务,可参考如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:applicationContext.xml"}) public class JerseyTest {
private static final FleaLogger LOGGER = FleaLoggerProxy.getProxyInstance(JerseyTest.class);
@Autowired private FleaJerseyClient client;
@Before public void init() { IFleaUser fleaUser = new FleaUserImpl(); fleaUser.setAccountId(10000L); fleaUser.set("ACCOUNT_CODE", "13218010892"); FleaSessionManager.setUserInfo(fleaUser); }
@Test public void testDownloadAuth() throws CommonException { String clientCode = "FLEA_CLIENT_DOWNLOAD_AUTH";
InputDownloadAuthInfo downloadAuthInfo = new InputDownloadAuthInfo(); downloadAuthInfo.setFileId("123123123123123123123");
Response<OutputDownloadAuthInfo> response = client.invoke(clientCode, downloadAuthInfo, OutputDownloadAuthInfo.class);
LOGGER.debug("result = {}", response); } }
|
总结
至此,Flea RESTful接口客户端接入已经完成。上述自测类,可至GitHub查看 JerseyTest.java