写点什么

Java EE 6 Web Services:JAX-RS 1.1 提供了基于注解的 REST 支持

  • 2010-02-14
  • 本文字数:1239 字

    阅读完需:约 4 分钟

JavaEE 6 规范提供了 Java API for RESTful Web Services(JAX-RS)支持,提供了基于 POJO 的框架以构建轻量级的 Web Services,该框架符合 REST(Representational State Transfer)风格的软件架构。JAX-RS 1.1 隶属于 JSR 311 ,其所提供的几个注解可用于将 Java 类的方法公开为 Web 资源。
JAX-RS 会自动进行 Java 类与 MIME 媒体类型之间的转换。比如说,如果通过注解“@Produces(MediaType.TEXT_PLAIN)”标记某个类方法,JAX-RS 则会将该 Java 类型转换为“text/plain”MIME 类型,这代表了普通文本,同时通过 HTTP 响应将该类型的内容发送给客户端。

Java EE 6 包含了 JAX-RS 的最新版,即 JAX-RS 1.1,该版本充分利用了 Java EE 6 的新特性,而 Jersey 则是 JAX-RS 规范开源的参考实现,Jersey 1.1.5 实现了 JAX-RS 1.1。

注解增加了一些额外的说明信息,可以标识资源并辅助处理 HTTP 请求。JAX-RS 所支持的一些注解列举如下:

Path:该注解为资源指定了一个相对路径。 @Path 所标识的 URI 路径用于资源类或是类方法处理请求所用。

GET @GET 所注解的方法用于处理 HTTP GET 请求。当客户端向代表某个 Web 资源的 URI 直接发送 HTTP GET 请求时,JAX-RS 运行时会调用被 @GET 所注解的方法来处理该 GET 请求。

POST @POST 所注解的方法用于处理 HTTP POST 请求。

Produces:该注解用于标识MIME 媒体类型,这样资源中的方法就会生成该类型的内容并返回给客户端。

Consumes @Consumes 注解用于标识 MIME 媒体类型,这表示了资源中的方法可以接受客户端所请求的类型。与 @Produces 注解一样,如果在类上指定了 @Consumes 注解,该注解就会应用到类中的所有方法;如果在某个方法上指定了 @Consumes 注解,那么它会覆盖类上所指定的 @Consumes 注解。

JAX-RS 还提供了其他一些方便的特性,比如基于参数的注解可以获得请求中的信息, @QueryParam , 就是这样一种注解,它可以从请求 URL 的查询字符串中获得查询参数。其他基于参数的注解还有 @MatrixParam ,它可以从 URL 路径的 segment 部分获取信息; @HeaderParam 可以从 HTTP 头中获得信息,而 @CookieParam 则可以从 cookie 相关的 HTTP 头中获得 cookie 信息。

还有不少辅助类和接口简化了 Java 中 RESTful Web Services 的构建和使用,列举如下:

  • MediaType 类可用于获取 MIME 媒体类型。该类的实例是不可变的。
  • UriInfo 是个接口,可以获取应用和请求的 URI 信息。
  • UriBuilder 能够获取 URI 模板信息,它可以从 URI 的各个组成部分来构建 URI。
  • Response 是个抽象类,代表了 HTTP 响应。在应用向运行时提供元数据时,它定义了返回实例与运行时之间的契约。应用中的类可以直接继承 Response 类,也可以使用其静态方法来通过 ResponseBuilder 创建实例。
  • Response.ResponseBuilder 用于构建 Response 对象,使用了 Builder 模式。

来自 JBoss 的 RESTEasy 框架也实现了 JAX-RS 规范。Apache 开源的服务框架 CXF 也在 2.3 版中提供了对 JAX-RS 1.1 的支持。

查看英文原文: Java EE 6 Web Services: JAX-RS 1.1 Provides Annotation Based REST Support

2010-02-14 07:133850
用户头像

发布了 88 篇内容, 共 273.9 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

研发效能的道法术器

laofo

DevOps cicd 研发效能 基础设施 持续交付

requestVideoFrameCallback() 简单实例

devpoint

3D 视频处理 7月月更

跨区域网络的通信学习静态路由

flow

签约计划第三季

上海交大牵手淘宝成立媒体计算实验室:推动视频超分等关键技术发展

阿里巴巴大淘宝技术

音视频 音视频技术

基于对象的实时空间音频渲染丨Dev for Dev 专栏

RTE开发者社区

Dev for Dev 空间音频 实时互动

SpringBoot基于异常处理exception发送邮件消息提醒

宁在春

springboot 7月月更

私有化部署的即时通讯平台,为企业移动业务安全保驾护航

BeeWorks

字符设备驱动结构

贾献华

7月月更

【周周有奖】云原生编程挑战赛“边缘容器”赛道邀你来战!

阿里巴巴云原生

阿里云 边缘容器 云原生编程挑战赛

编码用这16个命名规则能让你少写一半以上的注释!

岛上码农

flutter ios 前端 安卓开发 签约计划第三季

深开鸿:万物智联的大江上,升起一轮开源鸿蒙月

脑极体

英特尔数据中心GPU正式发货,以开放灵活提供强劲算力

科技新消息

Baklib|为什么说企业需要重视客户体验?

Baklib

什么是低代码?哪些平台适合业务人员?用来开发系统靠不靠谱?

优秀

低代码 低代码平台

基于java springboot失物招领微信小程序源码

清风

计算机毕业设计 失物招领小程序

openEuler Embedded SIG | 分布式软总线

openEuler

开源 分布式 操作系统 嵌入式 openEuler

被忽视的智能电视小程序领域

Geek_99967b

物联网

leetcode 763. Partition Labels 划分字母区间(中等)

okokabcd

LeetCode 数据结构与算法 贪心算法

DDD领域驱动设计如何进行工程化落地

慕枫技术笔记

DDD 架构设计 7月月更

云原生编程挑战赛火热开赛,51 万奖金等你来挑战!

阿里巴巴云原生

阿里云 云原生编程挑战赛

一文读懂Okaleido Tiger近期动态,挖掘背后价值与潜力

小哈区块

融合数据库生态:利用 EventBridge 构建 CDC 应用

阿里巴巴云原生

阿里云 云原生 事件总线 CDC EventBridge

智能电视与小程序的结合

Geek_99967b

物联网

React Refs 笔记📝

程序员海军

React 7月月更

为什么客户支持对SaaS公司很重要?

Geek_da0866

怎样搭建企业内部维基百科

Baklib

学习Typescript(二)

bo

前端 ts 7月月更

快手重点整治搬运、洗稿等方式的养号行为,自媒体平台如何净化内容生态

石头IT视角

Java EE 6 Web Services:JAX-RS 1.1提供了基于注解的REST支持_Java_Srini Penchikala_InfoQ精选文章