JavaEE的RESTful标准技术JAX-RS,jersey-client客户端使用介绍【享学Java】(上)

简介: JavaEE的RESTful标准技术JAX-RS,jersey-client客户端使用介绍【享学Java】(上)

前言


在Spring大行其道的今天,很多人对Java的RESTful规范JAX-RS可能比较陌生甚至未曾听闻,当然这也是能被“理解”的,毕竟Spring似乎现在已是JavaEE的事实标准。


现在有越来越多的公司希望能以简单而又贴合Web架构本身的方式公开Web API,因此REST变得越来越重要和流行。使用Ajax进行通信的富浏览器端也在朝这个目标不断迈进。这个架构原则提升了万维网的可伸缩性,无论何种应用都能从该原则中受益无穷。


正文


其实关于JAX-RS的资料并不算多,根据存在即合理原则我们需要承认它的重要性肯定比不上Spring,但是由于老外一般喜欢使用JavaEE规范技术,所以使得一些开源社区框架使用的均是基于JAX-RS的实现,因此对它来个简单的了解还是很有必要的。


何为JAX-RS(1.0和2.0)


JAX-RS是JAVA EE6引入的一个新技术,它的英文全称为Java API for RESTful Web Services,它的核心概念是Resource,即面向资源。JavaEE 6于2019年12月份正式发布。


JSR 311


它被称为JAX-RS 1.0标准,它提供一套JSR311标准API:


<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
</dependency>


image.png


这些注解和Spring MVC的@RequestMapping、@RequestParam、@PathVariable...何其相似,各位可以类比起来学习,本处不必一一展开。但是注意一点,SpringMVC在开发REST应用时,是不支持JSR311标准的。


JSR 339


它是JAX-RS 2.0版本,于2018年发布。它不仅定义了一套用于构建 RESTful 网络服务的 API,同时也通过增强客户端 API 功能简化了REST 客户端的构建过程。


<dependency>
    <groupId>jakarta.ws.rs</groupId>
    <artifactId>jakarta.ws.rs-api</artifactId>
    <version>2.1.6</version>
</dependency>


image.png


规范API的向下兼容度还是非常好的,它在1.0规范的基础上对Client的构建做了增强,如提供了javax.ws.rs.client.ClientBuilder、javax.ws.rs.client.WebTarget等实用API。


落地产品

每个JavaEE规范都应对应其落地产品的实现,就像JPA的实现落地实现有Hibernate、TopLink等。基于JAX-RS实现的框架有Jersey、RESTEasy,当然还有Apache CXF。但是,因为Jersey是最早的实现(出现得比JSR311还早),是JSR311参考的主要对象,所以,可以说Jersey就是事实上的标准,就像Hibernate是JPA的事实标准一样~


值得一提的是:RESTEasy是由JBoss公司开发的,所以将用RESTEasy框架实现的应用部署到JBoss服务器上,可以实现很多额外的功能(但很显然,JBoss已经退出了历史舞台)。


Jersey


Jersey是一个REST框架,既然是REST框架,那自然提供了REST服务相关的一切东西。因此在使用过程中,你可以同Spring MVC做对比,部署到Servlet容器上即可运行,形如这样:


@Path("/api/v1/user")
public class UserResource{
    @GET
    @Path("/{username}")
    @Consumes({"application/json", "application/xml"})
    @Produces("application/json")
    public String getUser(@PathParam("username") String username){
        ...
    }
}


作为服务端,它使用的库是:


1.x:
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.19.4</version>
</dependency>
2.x:
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.30.1</version>
</dependency>




相关文章
|
29天前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
285 1
|
1月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
124 3
|
1月前
|
存储 人工智能 算法
Java 大视界 -- Java 大数据在智能医疗影像数据压缩与传输优化中的技术应用(227)
本文探讨 Java 大数据在智能医疗影像压缩与传输中的关键技术应用,分析其如何解决医疗影像数据存储、传输与压缩三大难题,并结合实际案例展示技术落地效果。
|
1月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据在智能物流运输车辆智能调度与路径优化中的技术实现(218)
本文深入探讨了Java大数据技术在智能物流运输中车辆调度与路径优化的应用。通过遗传算法实现车辆资源的智能调度,结合实时路况数据和强化学习算法进行动态路径优化,有效提升了物流效率与客户满意度。以京东物流和顺丰速运的实际案例为支撑,展示了Java大数据在解决行业痛点问题中的强大能力,为物流行业的智能化转型提供了切实可行的技术方案。
|
1月前
|
分布式计算 Cloud Native 安全
Java:历久弥新的技术基石
Java:历久弥新的技术基石
|
1月前
|
分布式计算 Java 大数据
Java:技术生态中的常青树
Java:技术生态中的常青树
|
1月前
|
人工智能 自然语言处理 分布式计算
AI 驱动传统 Java 应用集成的关键技术与实战应用指南
本文探讨了如何将AI技术与传统Java应用集成,助力企业实现数字化转型。内容涵盖DJL、Deeplearning4j等主流AI框架选择,技术融合方案,模型部署策略,以及智能客服、财务审核、设备诊断等实战应用案例,全面解析Java系统如何通过AI实现智能化升级与效率提升。
173 0
|
1月前
|
机器学习/深度学习 人工智能 Java
Java 技术支撑下 AI 与 ML 技术融合的架构设计与落地案例分析
摘要: Java与AI/ML技术的融合为智能化应用提供了强大支持。通过选用Deeplearning4j、DJL等框架解决技术适配问题,并结合Spring生态和JVM优化提升性能。在金融风控、智能制造、医疗影像等领域实现了显著效果,如审批效率提升3倍、设备停机减少41%、医疗诊断延迟降低80%。这种技术融合推动了多行业的智能化升级,展现了广阔的应用前景。
110 0
|
1月前
|
运维 监控 算法
基于 Java 滑动窗口算法的局域网内部监控软件流量异常检测技术研究
本文探讨了滑动窗口算法在局域网流量监控中的应用,分析其在实时性、资源控制和多维分析等方面的优势,并提出优化策略,结合Java编程实现高效流量异常检测。
53 0
|
1月前
|
Cloud Native 算法 Java
Java:历久弥新的企业级技术基石
Java:历久弥新的企业级技术基石