13

我想使用 Jersey 来实现一些 Java REST 服务。默认的 POJO 转换器 JAXB 处理 JSON 对象有点奇怪,所以我想使用 Jackson 来转换 POJO,开销很小或更少。我如何告诉 J2ME 框架使用另一个转换器?

我的 web.xml 看起来像这样:

<!-- Jersey JAVA REST implementation -->
<servlet>
<servlet-name>Jersey</servlet-name>
    <servlet-class>
        com.sun.jersey.spi.container.servlet.ServletContainer
    </servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>org.foobar.rest.services</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
4

2 回答 2

17

只需添加 jackson JAR 并像这样修改 web.xml:

<!-- Jersey JAVA REST implementation -->
<servlet>
<servlet-name>Jersey</servlet-name>
    <servlet-class>
        com.sun.jersey.spi.container.servlet.ServletContainer
    </servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>org.foobar.rest.services;org.codehaus.jackson.jaxrs</param-value>    <!--  use jackson for JSON -->
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

所需的 Jackson JAR ( http://jackson.codehaus.org/ ) 是:

jackson-core-asl-1.9.10.jar
jackson-core-lgpl-1.9.10.jar
jackson-jaxrs-1.9.10.jar
jackson-mapper-asl-1.9.10.jar
jackson-mapper-lgpl-1.9.10.jar
jackson-mrbean-1.9.10.jar
jackson-smile-1.9.10.jar
jackson-xc-1.9.10.jar
于 2012-10-14T14:46:06.660 回答
5

除了注册 Jackson 1.x 提供者之外,您还可以使用 Jackson 2.x JSON 提供者(使用 Jackson 2.x 数据绑定和它依赖的核心模块):https ://github.com/FasterXML/jackson-jaxrs-json -provider 它使用服务提供者接口自动注册自己(1.x 没有这样做,因为担心用户可能会对此感到惊讶,因为它基于类路径中存在的 jar 而不是显式选择)。

编辑(2013 年 9 月):正如 @koppor 所指出的,该模块已被弃用,可以从https://github.com/FasterXML/jackson-jaxrs-providers找到替换模块(JSON、XML、Smile) (谢谢!)

于 2012-10-15T03:31:20.890 回答