2017-09-01 54 views
0

Jackson的文档说,实现其接口的类将通过调用接口的serialize()方法进行序列化。如何让杰克逊使用其JsonSerializable接口?

我在泽西岛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 { 

我错过了什么让杰克逊功能工作?

我在杰克逊的最新源代码中验证了该功能仍然存在。我想我可以通过调试器中的2.8.4源代码追踪它,但也许有人知道答案。

回答

0

显然,答案

“我在想什么?”

没有

写的问题后,我再次重修的一切,重新启动Tomcat和重新部署,并再次测试并得到了我的预期输出。

因此,我会将这个问题记录为坏的构建,错误的部署,混淆的类加载器,类似的东西。我离开这个问题,因为它提供了一个可以帮助某人的例子。