【问题标题】:Rest JSON with Jackson @type not added in json没有在 json 中添加 Jackson @type 休息 JSON
【发布时间】:2016-05-16 18:32:55
【问题描述】:

我将 jackson 添加到我的 rest jersey 项目中,因为 jersey 的默认 json 映射器在列表元素大小为 1 时提供 JSON 对象,并在元素大小为 2 或更大时提供 JSON 数组。

所以 jackson 与该部分配合得很好,但是 jersey 的默认 json 映射器(idk 是默认值)可以给我一个名为 @type 的属性,当实现 jackson 时,该属性不会添加到 JSON 返回中。

在我使用之前:@XmlRootElement 中的@XmlType(name = "TypeName") 现在我正在尝试使用@JsonTypeInfo,@JsonTypeName 使用 jackson 2.5.4 和 2.22.2 但没有成功。

如何添加@type 属性?

编辑1:(添加web.xml)

在 web.xml 我有这个:

<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>my.package.webservice</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

编辑 2:(添加杰克逊版本)

jackson-jaxrs-json-provider:2.7.4 
jersey-media-json-jackson:2.22.2
jackson-annotations:2.7.4
jackson-jaxrs-base:2.7.4
jackson-databind:2.7.4
jackson-core:2.7.4
jackson-module-jaxb-annotations:2.7.4
jersey-entity-filtering:2.22.2
jersey-common:2.22.2

【问题讨论】:

  • 你用的是什么服务器?
  • 我正在使用 JBoss AS 7.1.1
  • 您是否进行过任何确认检查以查看您的 Jackson 2.x 是否正在使用? AFAIK,Jackson 1.x 是 JBoss 7 中的默认 JSON 提供程序
  • 当我尝试实现 Jackson 时,服务器抛出了诸如“方法未找到异常”之类的错误,我必须添加更多的 pom 依赖项才能使其工作。如何测试版本?
  • 您是否添加了jackson-jaxrs-json-provider?或者只是杰克逊数据绑定?您需要 jaxrs 提供程序,并且需要在您的 jaxrs 应用程序中注册 JacksonJsonProvider。

标签: java json rest jakarta-ee jackson


【解决方案1】:

就像@peeskillet 说的:

Jackson 1.x 是 JBoss 7 中的默认 JSON 提供程序

我不得不从 JBoss AS 7.1.1 中删除提供的 jackson,得到步骤 here

我像这样更改了 web.xml servlet:

<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>my.package.MyApplication</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

我必须创建类“my.package.MyApplication”:

@ApplicationPath("resources")
public class MyApplication extends PackagesResourceConfig {

    public MyApplication() {
        super("my.package.webservice;com.fasterxml.jackson.jaxrs.json");
    }

}

jackson 2.x 现在正在运行,感谢 @peeskillet 帮助我。

接下来是创建一个名为@type 的属性,如下所示:

@JsonProperty(value = "@type")
String xmlType = "TypeName";

并且 JSON 返回 @type 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多