我在Spring MVC項目中使用Jackson 2.3.2庫,並試圖通過實現JSONSerializableWithType接口指定自定義包裝對象上的自定義JSON序列化其中包括在嘗試將對象實例序列化爲JSON時被Jackson調用的名爲serialize()的方法。爲什麼不使用serialize()自定義包裝類的方法擴展LinkedHashMap
奇怪的是,只要我的對象包裝不擴展LinkedHashMap < ...>,就可以正確調用這個序列化方法。 如果我的對象包裝擴展了一個傑克遜「知道」如何以默認方式序列化的類,則不再調用serialize()方法。
我的包裝類看起來是這樣的:
public class ResponseRoomOccupancy
extends LinkedHashMap<...>
implements org.codehaus.jackson.map.JsonSerializableWithType {
@Override
public void serialize(JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
// actual serialization of the object
jgen.writeEndObject();
}
@Override
public void serializeWithType(JsonGenerator jgen,
SerializerProvider provider, TypeSerializer typeSer)
throws IOException, JsonProcessingException {
serialize(jgen, provider);
}
}
控制器:
@RequestMapping(value = "/occupancy")
public @ResponseBody ResponseRoomOccupancy
getRoomOccupancy(RequestRoomOccupancy request) {
return appointmentService.getEnrichedRoomOccupancy(request);
}
任何人都可以向我解釋爲什麼傑克遜不使用自定義的序列化方法在延伸的LinkedHashMap類?
UPDATE:
作爲索蒂里奧斯扎Delimanolis正確地指出的那樣,JSONSerializableWithType接口是較舊版本的傑克遜(< 1.9)的一部分。 但我不知道爲什麼這種自定義序列化與自定義類的工作(例如,如果LinkedHashMap與某些類Foo < ...>交換)。
好的,這是正確的。但我無法弄清楚,爲什麼它可以與自定義類一起工作。我更新了這個問題。 – juffel 2014-09-11 09:59:41
@juffel看我的編輯。 – 2014-09-11 14:27:06
我認爲傑克遜的這種行爲並不是非常一致。 – juffel 2014-09-12 15:01:50