快速业务通道

Spring MVC与JAX-RS比较与分析 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
信息的有无来匹配请求:

@RequestMapping(headers="Foo-Header") @RequestMapping(headers="!Foo-Header")

或是根据头信息的值进行匹配:

@RequestMapping(headers="content-type=text/*")

Spring MVC与JAX-RS比较与分析(6)

时间:2011-10-22 infoq 译:张龙

处理请求数据

HTTP请求中包含着应用需要提取和处理的数据,如HTTP头、cookie、查询字符串参数、表单参数以及 请求体(XML、JSON等)中所包含的大量数据。在RESTful应用中,URL本身也可以带有重要的信息,如通 过路径参数指定需要访问哪个资源、通过文件扩展名(.html, .pdf)指定需要何种内容类型等。 HttpServletRequest提供了处理这一切的所有底层访问机制,但直接使用 HttpServletRequest实在是太 乏味了。

请求参数、Cookies和HTTP头

Spring MVC和JAX-RS拥有能够抽取这种HTTP请求值的注解:

@GET @Path public void foo(@QueryParam("q") String q, @FormParam("f") String f, @CookieParam ("c") String c,    @HeaderParam("h") String h, @MatrixParam("m") m) {    // JAX-RS } @RequestMapping(method=GET) public void foo(@RequestParam("q") String q, @CookieValue("c") String c,  @RequestHeader("h") String h) {    // Spring MVC }

上面的注解非常像,区别在于JAX-RS支持矩阵参数(matrix parameters)的抽取,拥有单独的注解来 处理查询字符串和表单参数。矩阵参数并不常见,他们类似于查询字符串参数,但却使用了特殊的路径片 段(比如GET /images;name=foo;type=gif)。稍后将介绍表单参数。

假如使用了前请求范围声明资源,那么JAX-RS可以在属性和setters方法上使用上述注解。

Spring MVC有个特性能让我们少敲几个字符,如果注解名与Java参数名相同,那么就可以省略掉上面 的注解名了。比如说,名为“q”的请求参数要求方法参数也得为“q”:

public void foo(@RequestParam String q, @CookieValue c, @RequestHeader h)  { }

这对于那些在参数中使用了注解而导致方法签名变长的情况来说实在是太方便了。请记住,这个特性 要求代码使用调试符号进行编译。

类型转换与HTTP请求值的格式化

HTTP请求值(头、cookies和参数)是不变的字符串并且需要解析。

JAX-RS通过寻找valueOf()方法或是在客户化的目标类型中接收字符串的构造方法来解析请求数据。 JAX-RS支持如下类型的注解方法参数,包括路径变量、请求参数、HTTP头值和cookies:

原生类型。

拥有接收单个字符串参数的构造方法的类型。

拥有一个接收单个字符串参数的名为valueOf的静态方法的类型。

List<T>、Set<T>或是SortedSet<T>,其中的T满足上面2个或3个要求。

Spring 3支持上面所有要求。除此之外,Spring 3提供了一种全新的类型转换与格式化机制,并且可 以使用注解实现。

Spring MVC与JAX-RS比较与分析(7)

时间:2011-10-22 infoq 译:张龙

表单数据

如前所述,JAX-RS处理查询字符串参数和表单参数的方式是不同的。虽然Spring MVC只有一个 @RequestParam,但它还提供了一种Spring MVC用户很熟悉的数据绑定机制来处理表单输入。

比如说,如果一个表单提交了3个数据,那么一种可能的处理方式就是声明一个带有3个参数的方法:

@RequestMapping(method=POST) public void foo(@RequestParam String name, @RequestParam creditCardNumber,  @RequestParam expirationDate) {    Credit card = new CreditCard();    card.setName(name

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号