Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >flea-jersey使用之Flea RESTful接口客户端接入

flea-jersey使用之Flea RESTful接口客户端接入

原创
作者头像
huazie
发布于 2025-04-30 14:54:28
发布于 2025-04-30 14:54:28
1111
举报
文章被收录于专栏:开发框架-Flea开发框架-Flea

引言

本篇介绍 flea-jersey 模块下的 flea-jersey-client 子模块,该模块提供对 flea-jersey-server 子模块封装的 POSTPUTDELETEGET资源的调用。

1. 客户端依赖

项目内容可至GitHub 查看 flea-jersey-client

相关依赖如下:

代码语言:xml
AI代码解释
复制
    <!-- FLEA JERSEY CLIENT-->
    <dependency>
        <groupId>com.huazie.fleaframework</groupId>
        <artifactId>flea-jersey-client</artifactId>
        <version>2.0.0</version>
    </dependency>

2. 客户端接入步骤

  1. 客户端确定待调用的资源服务【参见 Flea RESTful接口服务端接入】,并配置资源客户端表;
  2. 客户端定义业务入参和业务出参 POJO 类;
  3. 客户端使用 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 客户端业务输入和输出参数定义

下载鉴权业务输入对象,定义文件编号入参,代码如下:

代码语言:java
AI代码解释
复制
@Getter
@Setter
@ToString
public class InputDownloadAuthInfo implements Serializable {

    private static final long serialVersionUID = 6849188299874561970L;

    private String fileId; // 文件编号

}

下载鉴权业务输出对象,定义下载鉴权令牌出参,代码如下:

代码语言:java
AI代码解释
复制
@Getter
@Setter
@ToString
public class OutputDownloadAuthInfo implements Serializable {

    private static final long serialVersionUID = 5689920399219551237L;

    private String token; // 下载鉴权令牌

}

这里定义的客户端业务入参【InputFileUploadInfo】和 出参【OutputFileUploadInfo】使用的是服务端定义的资源服务入参和出参;当然这里也可以不一样,原则上只需要客户端业务入参和资源服务入参,客户端业务出参和资源服务出参两边对象转 JSONXML 的数据内容一致即可。

3.3 Flea Jersey客户端接入使用

3.3.1 FleaJerseyClient

FleaJerseyClient,即Flea Jersey 客户端,对外提供统一的Jersey接口客户端调用API

代码语言:java
AI代码解释
复制
@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 接口客户端配置【flea_jersey_res_client】;
  • 然后,根据 Flea Jersey 接口客户端配置构建通用的请求配置;
  • 接着,传入请求配置,让请求工厂生产一个 Flea Jersey 请求;
  • 最后,执行 Flea Jersey 请求。

3.3.2 Post 请求

3.1 中可以看到下载鉴权资源服务的请求方式是 Post,也就是说,在上述请求工厂生产 Flea Jersey 请求中,它会生产一个 Post 请求 ,如下:

代码语言:java
AI代码解释
复制
/**
 * 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.3.3 接入自测

经过3.13.2的步骤,客户端接入已经完成一半,下面就可以通过 FleaJerseyClient 调用资源服务,可参考如下:

代码语言:java
AI代码解释
复制
@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 删除。

评论
登录后参与评论
1 条评论
热度
最新
Flea框架,一款小巧易用的Java应用基础开发框架 https://github.com/huazie/flea-framework 欢迎各位 star
Flea框架,一款小巧易用的Java应用基础开发框架 https://github.com/huazie/flea-framework 欢迎各位 star
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
flea-jersey使用之文件上传接入
文件上传功能,需要引入 Flea RESTful 接口服务端和客户端依赖,详细如下所示:
huazie
2025/05/11
1281
flea-jersey使用之文件上传接入
flea-jersey使用之文件下载接入
文件下载功能,需要引入Flea RESTful接口服务端和客户端依赖,详细如下所示:
huazie
2025/05/13
2611
flea-jersey使用之文件下载接入
flea-jersey使用之Flea RESTful接口服务端接入
本篇介绍 flea-jersey模块下的flea-jersey-server 子模块,该模块封装了通用的POST、PUT、DELETE 和 GET资源。
huazie
2025/04/28
1391
flea-jersey使用之Flea RESTful接口服务端接入
flea-common使用之本地国际化实现
本地国际化,它是指应用程序根据所处语言环境的不同【如 Java 中可用 国际化标识类 java.util.Locale 区分不同语言环境】,自动匹配应用内置的相应的语言环境下的资源配置【如 Java 中可用 资源包类 java.util.ResourceBundle 来匹配】,从而获取并对外展示相应的语言环境下的资源信息。
huazie
2024/08/14
2530
flea-common使用之本地国际化实现
flea-cache使用之Redis分片模式接入
spring-context-support-4.3.18.RELEASE.jar
huazie
2024/10/16
2720
flea-cache使用之Redis分片模式接入
flea-jersey使用之Flea RESTful接口介绍
相关文档可查看 Flea RESTful接口规范.docx ,点击 View raw 即可下载
huazie
2025/03/12
1041
flea-jersey使用之Flea RESTful接口介绍
flea-cache使用之整合Memcached和Redis接入
Huazie 的 flea-framework 框架下的 flea-cache 模块,我们已经介绍了有关 Memcached 接入 和 Redis 接入;那么本篇我们将要介绍如何 整合接入 Memcached 和 Redis。
huazie
2025/05/16
2201
flea-cache使用之整合Memcached和Redis接入
flea-cache使用之Memcached接入
spring-context-support-4.3.18.RELEASE.jar
huazie
2024/10/11
1880
flea-cache使用之Memcached接入
flea-db使用之JPA封装介绍
JPA(Java Persistence API),即 Java 持久层 API,它是 Java 平台上用于实现对象关系映射 (Object-Relational Mapping,简称ORM) 的规范。它定义了 Java 对象如何映射到关系型数据库中的表,并提供了一套标准的 API 来管理这些映射关系以及数据库中的持久化对象。
huazie
2024/08/05
3320
flea-db使用之JPA封装介绍
[享学Eureka] 七、远程通信模块:EurekaHttpClient接口抽象以及基于Jersey的Low-Level实现JerseyApplicationClient
代码下载地址:https://github.com/f641385712/netflix-learning
YourBatman
2020/04/01
1.3K0
[享学Eureka] 七、远程通信模块:EurekaHttpClient接口抽象以及基于Jersey的Low-Level实现JerseyApplicationClient
flea-db使用之封装JDBC接入
本篇将要演示 FleaJDBCHelper 的使用,该工具类封装了基本的JDBC增删改查的操作,只需简单几步即可实现数据库操作。
huazie
2024/10/10
1970
flea-db使用之封装JDBC接入
flea-cache使用之Redis哨兵模式接入
spring-context-support-4.3.18.RELEASE.jar
huazie
2025/05/09
2170
flea-cache使用之Redis哨兵模式接入
flea-cache使用之Redis集群模式接入
spring-context-support-4.3.18.RELEASE.jar
huazie
2024/11/08
2070
flea-cache使用之Redis集群模式接入
Jersey框架一:Jersey RESTful WebService框架简介[通俗易懂]
开发RESTful WebService意味着支持在多种媒体类型以及抽象底层的客户端-服务器通信细节,如果没有一个好的工具包可用,这将是一个困难的任务
全栈程序员站长
2022/09/29
1.9K0
flea-db使用之JPA分库分表实现
flea-frame-db使用之基于EntityManager实现JPA分表的数据库操作【旧】
huazie
2024/10/24
3360
flea-db使用之JPA分库分表实现
JavaEE的RESTful标准技术JAX-RS,jersey-client客户端使用介绍【享学Java】
在Spring大行其道的今天,很多人对Java的RESTful规范JAX-RS可能比较陌生甚至未曾听闻,当然这也是能被“理解”的,毕竟Spring似乎现在已是JavaEE的事实标准。
YourBatman
2020/03/18
6.4K0
flea-db使用之JPA接入
MySQL 的 JDBC 驱动 mysql-connector-java-5.1.25.jar
huazie
2024/08/06
2090
flea-db使用之JPA接入
flea-db使用之基于对象池的FleaJPAQuery
书接上回《JPA封装介绍》博文,提到 FleaJPAQuery 在前一个版本(单例模式)下存在并发的问题,下面首先来分析一下,然后再介绍目前基于对象池的解决方案。
huazie
2024/10/02
1590
flea-db使用之基于对象池的FleaJPAQuery
spring security oauth2 资源服务/客户端无法正确获取权限
当资源服务/客户端使用token-info-uri校验token时无法获取全部的授权权限,只能获取其中一个权限,使用user-info-uri则可以获取全部的授权权限
路过君
2020/08/11
3.6K0
spring security oauth2 资源服务/客户端无法正确获取权限
SpringMVC 解毒1
学Java开发的同学始终避不开Spring,学JavaWeb开发的同学就更避不开SpringMVC了。凡是有点追求的程序员肯定也想读一读Spring和SpringMVC的源码,我也不例外,做JavaWeb开发有两年多了,平时开发中也有debug进SpringMVC源码,但始终没有对SpringMVC源码有一个整体的、全面的了解。这次,我将带着读者一览SpringMVC,将它的核心流程和边边角角尽量清楚地展示给大家,为什么起名SpringMVC 解毒,其含义是:在这里,一次的、全面的了解SpringMVC,然后似庖丁解牛般使用SpringMVC而设计你的业务。我阅读的源码是基于4.3.0.RELEASE版本,读者如果想看到同样的代码和效果,也请采用该版本。
zhangheng
2020/04/29
6550
SpringMVC 解毒1
推荐阅读
相关推荐
flea-jersey使用之文件上传接入
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档