【问题标题】:How to easily use Jackson for Jersey如何轻松地使用 Jackson for Jersey
【发布时间】:2012-10-14 14:45:22
【问题描述】:

我想使用 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>

【问题讨论】:

    标签: json jakarta-ee jersey jackson


    【解决方案1】:

    只需添加 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
    

    【讨论】:

    • 它对我不起作用。我收到错误消息“找不到 Java 类的消息正文编写器 ... 和 MIME 媒体类型 application/json”
    • 要使用 Maven 提取所需的 Jackson JAR,只需依赖 jackson-mapper-asl
    • 仅仅依靠使用 maven 的 jackson-mapper-asl 是不够的,它不会拉取所有必要的 jar。相反,只依赖于 jar jersey-media-json-jackson,它会拉取所有需要的 jar。
    • 中指定 org.codehaus.jackson.jaxrs 是我长期以来一直缺少的。没有人清楚地提到它。我正在尝试不同的教程;下载了大量的罐子,但没有这个简单的东西,什么都没有。谢谢@willsteel
    • 如果这不起作用,有人有什么建议吗?我们正在使用 jackson-all.jar。
    【解决方案2】:

    除了注册 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)(谢谢!)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2016-09-04
    • 1970-01-01
    相关资源
    最近更新 更多