本篇介绍 flea-jersey 模块下的 flea-jersey-client 子模块,该模块提供对 flea-jersey-server 子模块封装的 POST
、PUT
、DELETE
和 GET
资源的调用。
项目内容可至GitHub 查看 flea-jersey-client
相关依赖如下:
<!-- FLEA JERSEY CLIENT-->
<dependency>
<groupId>com.huazie.fleaframework</groupId>
<artifactId>flea-jersey-client</artifactId>
<version>2.0.0</version>
</dependency>
POJO
类;FleaJerseyClient
调用资源服务。添加资源客户端【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 | 客户端业务出参 |
下载鉴权业务输入对象,定义文件编号入参,代码如下:
@Getter
@Setter
@ToString
public class InputDownloadAuthInfo implements Serializable {
private static final long serialVersionUID = 6849188299874561970L;
private String fileId; // 文件编号
}
下载鉴权业务输出对象,定义下载鉴权令牌出参,代码如下:
@Getter
@Setter
@ToString
public class OutputDownloadAuthInfo implements Serializable {
private static final long serialVersionUID = 5689920399219551237L;
private String token; // 下载鉴权令牌
}
这里定义的客户端业务入参【InputFileUploadInfo
】和 出参【OutputFileUploadInfo
】使用的是服务端定义的资源服务入参和出参;当然这里也可以不一样,原则上只需要客户端业务入参和资源服务入参,客户端业务出参和资源服务出参两边对象转 JSON 或 XML 的数据内容一致即可。
FleaJerseyClient,即Flea Jersey 客户端,对外提供统一的Jersey接口客户端调用API。
@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");
// 未注入Bean,直接返回null
if (ObjectUtils.isEmpty(springBean)) {
if (LOGGER.isErrorEnabled()) {
LOGGER.debug1(new Object() {}, "未注入配置数据 Spring Bean,请检查");
}
return null;
}
// 获取Jersey客户端配置
FleaJerseyResClient resClient = springBean.getResClient(clientCode);
// 请检查客户端配置【client_code = {0}】:资源服务客户端未配置
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);
}
// 传入请求配置,让请求工厂生产一个Flea Jersey请求
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_res_client
】;从 3.1 中可以看到下载鉴权资源服务的请求方式是 Post
,也就是说,在上述请求工厂生产 Flea Jersey 请求中,它会生产一个 Post 请求 ,如下:
/**
* POST 请求,对外提供了执行 POST 请求的能力。
* <p> 注:服务端提供的资源入口方法需包含 POST 注解。
*
* @author huazie
* @version 1.0.0
* @since 1.0.0
*/
public class PostFleaRequest extends FleaRequest {
private static final FleaLogger LOGGER = FleaLoggerProxy.getProxyInstance(PostFleaRequest.class);
/**
* 默认的构造方法
*
* @since 1.0.0
*/
public PostFleaRequest() {
}
/**
* 带请求配置参数的构造方法
*
* @param config 请求配置
* @since 1.0.0
*/
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.1和3.2的步骤,客户端接入已经完成一半,下面就可以通过 FleaJerseyClient
调用资源服务,可参考如下:
@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
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有