使用Jackson和Jersey时,JsonTypeInfo不会序列化

时间:2011-02-04 14:57:40

标签: java rest jaxb jersey jackson

我使用JsonTypeInfo注释了一个JAXB类,以便我可以轻松地序列化多态类。但是,泽西序列化时,注释不会显示。更具体地说,它在使用ObjectMapper时显示,但不作为资源的返回类型显示。我现在很困惑,因为这似乎是Jersey =>的一个问题。杰克逊的互动。

为了调试,我使用jersey-samples中的jsonfromjaxb示例来定位我的问题。我将以下内容添加到Flights类中,以将其序列化为@class。

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@class")

我在资源中有以下方法,一个只返回JAXB对象,另一个手动使用ObjectMapper

@GET
@Produces({"application/json"})
public synchronized Flights getFlightList() {
    return myFlights;
}

@GET
@Path("/object_mapper")
@Produces({"application/json"})
public synchronized String getFlights() throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.writeValueAsString(myFlights);
}

查询/ jsonfromjaxb /航班的结果

{"flight":[{"flightId":"OK123","company":"Czech Airlines","number":123,"aircraft":"B737"},{"flightId":"OK124","company":"Czech Airlines","number":124,"aircraft":"AB115"}]}

查询/ jsonfromjaxb / flights / object_mapper

的结果
{"@class":"com.sun.jersey.samples.jsonfromjaxb.jaxb.Flights","flight":[{"number":123,"company":"Czech Airlines","aircraft":"B737","flightId":"OK123"},{"number":124,"company":"Czech Airlines","aircraft":"AB115","flightId":"OK124"}]}

谢谢, 赎金

1 个答案:

答案 0 :(得分:0)

我认为你看起来好像没有使用基于Jackson的序列化(即使用ObjectMapper的序列化;低级别的jackson生成器用于大多数JSON输出,包括以不同方式进行绑定的那些)。如果你是,它肯定应该看起来像你从显式使用看到的。因此,似乎需要更改Jersey JSON配置。