快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
);    card.setCreditCardNumber(creditCardNumber);    card.setExpirationDate(expirationDate); }

然而,随着表单数据量的增加,这种处理方式就会变得不切实际。借助于数据绑定,Spring MVC可以 创建、组装并传递包含有嵌套数据(账单地址、邮件地址等)、任意结构的表单对象。

@RequestMapping(method=POST) public void foo(CreditCard creditCard) {    // POST /creditcard/1     // name=Bond    // creditCardNumber=1234123412341234    // expiration=12-12-2012  }

要想与Web浏览器协同工作,表单处理是个重要环节。另一方面,Web Services客户端一般会在请求体 中提交XML或JSON格式的数据。

处理请求体中的数据

无论是Spring MVC还是JAX-RS都能够自动处理请求体中的数据:

@POST public Response createAccount(Account account) {    // JAX_RS } @RequestMapping(method=POST) public void createAccount(@RequestBody Account account) {    // Spring MVC }

JAX-RS中的请求体数据

在JAX-RS中,类型MessageBodyReader的实体供应者负责转换请求体数据。JAX-RS的实现需要拥有一个 JAXB MessageBodyReader,这可以使用具有注解@Provider的客户化MessageBodyReader实现。

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

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

Spring MVC中的请求体数据

在Spring MVC中,如果想通过请求体数据初始化方法参数,那可以将@RequestBody注解加到该方法参 数前,这与之前介绍的表单参数初始化正好相反。

在Spring MVC中,HttpMessageConverter类负责转换请求体数据,Spring MVC提供了一个开箱即用的 Spring OXM HttpMessageConverter。它支持JAXB、Castor、JiBX、XMLBeans和XStream,此外还有一个用 于处理JSON的Jackson HttpMessageConverter。

HttpMessageConverter会注册到AnnotationMethodHandlerAdapter上,后者会将到来的请求映射到 Spring MVC @Controllers上。下面是其配置:

<bean  class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"  >    <property name="messageConverters" ref="marshallingConverter"/> </bean> <bean id="marshallingConverter"  class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">    <constructor-arg ref="jaxb2Marshaller"/>    <property name="supportedMediaTypes" value="application/vnd.stocks+xml"/> </bean> <oxm:jaxb2-marshaller id="jaxb2Marshaller"/>

下图阐述了该配置:

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

Spring 3新增的mvc客户化命名空间将上述配置自动化了,只需增加如下配置片段即可:

<mvc:annotation-driven />

如果JAXB位于类路径上,它会注册一个用于读写XML的转换器;如果Jackson位于类路径上,它会注册 一个用于读写JSON的转换器。

准备响应

典型的响应需要准备响应代码、设定HTTP响应头、将数据放到响应体当中,还需要处理异常。

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

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

使用JAX-RS设定响应体数据

在JAX-RS中,要想将数据加到响应体中,只需要从资源方法中返回对象即可:

@GET @Path("{username}") public Account getAccount(@PathParam("username") String username) {    return accountRepository.findAccountByUsername(username); }

JAX-RS会寻找类型MessageBodyWriter的实体供应者,它能将

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号