【发布时间】:2018-02-10 04:38:46
【问题描述】:
Jackson 文档说,实现其 JsonSerializable 接口的类将通过调用接口的 serialize() 方法进行序列化。
我在 Jersey 2.25 下使用 Jackson 2.8.4 的项目中尝试了这个。
它继续使用 Jackson 的 BeanSerializer 基于公共 getter 进行默认序列化,而不是使用 SerializableSerializer 和 serialize() 方法。
代码看起来像这个相当简单的示例......
public class Minimal extends JsonSerializable.Base {
private String title;
private ZonedDateTime theTime;
public String getTitle() { return title; }
void setTitle(String title) { this.title = title; }
public ZonedDateTime getTheTime() { return theTime; }
void setTheTime(ZonedDateTime theTime) { this.theTime = theTime; }
@Override
public void serialize(JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeFieldName("title");
gen.writeString(this.title);
// Other serialization...
gen.writeEndObject();
}
@Override
public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {
throw new UnsupportedOperationException("Not supported.");
}
}
我还尝试了其他想法来使用正确的序列化程序来获得它......也许是愚蠢的想法......
public class Minimal implements JsonSerializable {
和
@JsonSerialize(using = SerializableSerializer.class)
public class Minimal extends JsonSerializable.Base {
和
@JsonSerialize(as = JsonSerializable.Base.class)
public class Minimal extends JsonSerializable.Base {
要让这个 Jackson 功能正常工作,我缺少什么?
我在 Jackson 的最新源代码中验证了该功能仍然存在。我想我可以通过调试器中的 2.8.4 源来跟踪它,但也许有人知道答案。
【问题讨论】:
标签: java json serialization jackson jersey