有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JSON中未添加Jackson@type的java Rest JSON

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

jackson很好地处理了这一部分,但是jersey的默认json映射器(idk what is default)可以给我一个名为@type的属性,当实现jackson时,属性不会添加到json返回中

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

如何添加@type属性

编辑1:(添加web.xml)

在网上。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

共 (1) 个答案

  1. # 1 楼答案

    就像@peeskillet说的:

    Jackson 1.x is the default JSON provider in JBoss 7

    我不得不从JBoss AS 7.1.1中删除jackson,获得步骤here

    我换了网页。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");
        }
    
    }
    

    杰克逊2号。x现在正在工作,谢谢@peeskillet帮助我

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

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

    JSON返回@type property