2

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

为了调试,我使用了 jersey-samples 中的 jsonfromjaxb 示例来定位我的问题。我在 Flight 类中添加了以下内容,以使其序列化到 @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/flights 的结果

{"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"}]}

谢谢,赎金

4

1 回答 1

0

我认为您似乎没有使用基于杰克逊的序列化(即使用 ObjectMapper 的序列化;低级杰克逊生成器用于大多数 JSON 输出,包括以不同方式完成绑定的输出)。如果你是,它绝对应该看起来像你从显式使用中看到的那样。所以这似乎是改变 Jersey JSON 配置的问题。

于 2011-02-05T06:17:49.553 回答