日期:2014-05-16 浏览次数:21196 次
简介
Apache Wink 正在快速成长为 JAX-RS 1.0 规范的标准实现之一。JSON.org 和 Jettison 是 JSON 同步的默认提供程序,但是它们自身存在某些问题。例如,它们的数组表示和有限的返回类型使编写 JAX-RS 服务及其客户 Ajax 应用程序变得很困难。
本文概述了一个配置现有的支持 Apache Wink 的 Web 应用程序来使用 Jackson JSON 提供程序的方法。通过使用一个简单的支持 Jackson 的 JAX-RS Web 服务的 样例代码 来了解这种提供程序的优点。
?
Apache Wink 附带的 JSON 提供程序
Apache Wink 打包了两个 JSON 提供程序作为标准版本的一部分:JSON.org 和 Jettison 实施。这两个提供程序都会使 Wink 服务和 AjaxBoth 应用程序的集成复杂化。这两个提供程序都不能直接将一个 Java 列表作为返回类型序列化到 JSON,因为 JAXB 需要一个封装的 XML 元素。这两者还有一些其他问题,例如:
object : { array : ["element1", "element2"] }
object : { array : "element1" }
object : { }
很明显,在 Javascript 中对不同结构的编码限制会导致多余的、不必要的复杂性。
Jackson
Jackson 本质上就是一个 JSON 处理器,用于 Java 对象的 JSON 表示的生成和解析。还可以对 Jackson 进行配置,作为 JAX-RS 实现的一个 JSON 序列化提供程序。
作为一个 JAX-RS JSON 序列化提供程序,如下所述,Jackson 有几个 JSON.org 和 Jettison 所没有的优点。
表 1. Jackson 的优点
Jackson 可以直接从服务中返回一个字符串对象的列表,无需一个封装的 XML 元素。 |
Jackson 拥有良好的、可预见的数组序列化设施。 |
具有比其他提供程序更快的速度。 |
Apache License 2.0 得到了很好的理解。使用该许可的组件被用于商业和免费软件产品。 |
?
针对 Jackson 配置 Apache Wink
本文中的示例假设:
org.apache.wink.server.internal.servlet.RestServlet
,在 web.xml 文件中进行配置,使用一个 JAX-RS 应用程序,如清单 1 所示。
清单 1. Wink servlet 的 web.xml 片段
<servlet> <servlet-name>WinkServlet</servlet-name> <servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>com.ibm.developerworks.winkJackson.WinkApplication</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>WinkServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> |
?
下载和安装 Jackson 库
从 Jackson Web 网站下载 Jackson 的最新版本(链接见 参考资源 )。在编写本文时,Jackson 团队还没有提供使用 Jackson 和 Apache Wink 所需的所有库的独立下载资源。您会需要 JAR 文件的 ASL 或者 LGPL 版本,如下所示。
JAR 文件必须显示在您的 Web 项目的类路径下。实现此目的的最简单的方法就是将它们放置在您的 WEB-INF/lib 目录。(您的 Apache Wink JAR 文件可能已经在这个目录下。)
配置 Apache Wink 来使用 Jackson 提供程序进行 JSON 序列化
现在,Jackson JSON 提供程序作为您的 Web 应用程序的一部分进行加载,但是 Apache Wink 还尚未使用它来进行 JSON 序列化。
调整 Wink servlet 的已配置过的应用程序来加载提供应用程序,如清单 2 所示。
清单 2. WinkApplication.java 示例
<
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|