JAX-RS 2.0 的新特性 已翻译 100%

oschina 投递于 2013/07/09 06:15 (共 6 段, 翻译完成于 07-10)
阅读 1011
收藏 1
0
加载中

当JAX-RS 1.0在2008年第一次由JSR-311——特别是其领导者Marc Hadley和Paul Sandoz——公之于众的时候,它就成为了第一个基于POJO/Annotation的、用于创建健壮的Web应用的框架。

现在五年过去了,Java EE 7已经发布并且它包含了最新的JAX-RS 2.0版本,JSR-339的实现由Marek Potociar和Santiago Pericas-Geertsen发起。我们将拭目以待一些新特性,它们将使得升级到JAX-RS 2.0变得有意义,但是首先,我们先来快速的回顾一下JAX-RS 1.0。

@Path(portfolios) 
public class PortfolioResource { 
   
  @GET 
  public Collection<Portfolio> allPortfolios() { 
    . . . 
  } 
   
  @GET 
  public Portfolio getPortfolio(
       @PathParam("portfolioId") String id) { 
    . . .
  }
}
御豪同学
翻译于 2013/07/09 09:15
1

在上面的列表中,第一行表示把这个资源映射到相关的路径/文件夹。第四行表示一个GET请求应该返回所有的文件夹。第九行和第十行表明一个GET请求,例如带有URI/文件夹/123的请求,应该提起出紧跟在资源URI(例如:文件夹)之后的参数(例如:123),并且把它声明为变量“id”,之后返回重组的文件夹。

这个语法在JAX-RS 2.0中任然保留。

与Java EE 7的核心主题相一致,JAX-RS 2.0添加了一些期待已久的特性,这些特性主要围绕Oracle所称的“简化API”。

这些特性可以这样分类:

  • 客户端API
  • 异步
  • HATEOAS(超媒体)
  • 注释
  • 验证
  • 过滤器与处理程序
  • 内容协商
御豪同学
翻译于 2013/07/09 09:34
1

我们将快速的看一下每个分类:

客户端API

JAX-RS 1.0是一个严格的客户端API,一些实现对客户端提供了各种等级的支持,但是通常开发人员会安装像Apache软件基Jakarte公共组件中的HttpClient 或 WizTools的 REST Client

JAX-RS 2.0 为客户端调用Web服务添加了一个"构建" 工具:

  Client client=ClientFactory.newClient();
  String shares=client.target("http://.../portfolio/123")
      .pathParam("identifier", "IBM")
      .queryParameter("identifierType", "ticker")
      .request("text/plain).get(String.class");

我们看,这个方法首先包含了一个客户端(client),然后使用了构建模式来构造URL的所有参数,同时,允许开发人员不需要使用各种各样的URL构造器来规划URL。

姜鹏飞
翻译于 2013/07/09 09:41
1

这个方法对于一个带有HTTP正文的请求来讲尤其有效,例如HTTP POST和HTTP PUT。下面的例子让应用能够出售100股的IBM:

Stock stock=client.target("http://.../portfolio/123/sell")
        .pathParam("identifier", "IBM")
        .queryParameter("identifier", "ticker")
        .request("application/json")
        .post(text("100", Shares.class));

异步
在JAX-RS 1.0中,一个要调用的客户端需要等待服务器传回的响应。2.0嵌入了异步支持。这让一个客户端能够发起一个REST的调用,并且在响应完成的时候得到一个Future或者一个InvocationCallback作为通知。

HATEOAS(超媒体)
根据严格的RESTafarian规范,如果你没有使用HATEOAS,你就不是在做REST!HATEOAS(作为应用状态引擎的超媒体)要求REST的生产者和客户在“每个调用返回一组链接”上达成共识,以便进行下一步。如果你认为REST是一个应用版本的Web页,那么HATEOAS就可以认为是包含一组Web页面的链接。

JAX-RS 2.0提供了Link和Target类,来把超链接嵌入到一个服务器端的响应当中,并把它们响应到客户端去。

御豪同学
翻译于 2013/07/09 10:01
1

注释
新的注释已经嵌入,例如支持新的注入。

Bean验证
一个基于注释的机制来识别参数的meta-data。例如“@NotNull shares”代表“shares”参数不允许为null。你同样可以提供传统的注释,比如保证特定的数据格式,例如邮编或者电话号码。

过滤器与处理程序
过滤器API提供了在一个响应模式链中链入servlet过滤器的能力。这对于嵌入正统的概念来过很有用,比如登入。任意过滤器都能够通过调用FilterAction.NEXT或者FIlterAction.STOP来各自决定是继续还是终止链。

处理程序与过滤器很相似,只不过他们在特定的扩展点中包含了一个方法调用。这对于扩展点的获取调用来讲很有用,例如调整或者丰富负载数据。

御豪同学
翻译于 2013/07/09 10:19
1

内容协商
@Accepts和@Produces参数更丰富的注释,让你可以优先处理请求/响应格式。

JAX-RS仍旧缺失一个好的安全模型,这使得使用外部的企业应用有些困难。我们希望下一个发布版本将会提供对于点对点认证的支持。

距离JEE容器提供JAX-RS 2.0的支持可能还有一段时间。然而你可以通过在你的应用中部署最新版本的Jersey来立即获益。Oracle已经发布了在WebLogic 12c中实施的步骤

更多的信息,请看OTN的文章Java EE 7与JAX-RS 2.0,它由JSR 339专家团队成员Adam Bien所作。

御豪同学
翻译于 2013/07/09 10:29
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(1)

gangzz
gangzz
JSR 339的最终版实在2013年5月发布的?感觉很多特性CXF很早就支持了啊?
返回顶部
顶部