gpt4 book ai didi

java - 将 Jackson 与 Jersey 一起使用时,JsonTypeInfo 不会序列化

转载 作者:行者123 更新时间:2023-11-29 09:23:09 25 4
gpt4 key购买 nike

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

为了调试,我使用了 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/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"}]}

谢谢,赎金

最佳答案

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

关于java - 将 Jackson 与 Jersey 一起使用时,JsonTypeInfo 不会序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4899397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com