Jackson docs说,实现 JsonSerializable 接口的类将通过调用Interface的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的最新源代码中验证了该功能仍然存在。我想我可以通过调试器中的2.8.4源跟踪它,但也许有人知道答案。
答案 0 :(得分:0)
显然答案是
"我错过了什么?"
Nothing 。
在写完问题之后,我再次重建了所有内容,重新启动了Tomcat,并重新部署并再次测试并得到了我预期的输出。
因此,我会将其归结为糟糕的构建,错误的部署,混淆的Classloader,类似的东西。我要离开这个问题,因为它提供了一个可以帮助某人的例子。