簡體   English   中英

使用Jackson將默認序列化程序應用於自定義序列化程序中的屬性

[英]Apply default serializer to properties in custom serializer with Jackson

我有一個需要序列化的對象,但是我碰到了一堵牆。 我需要一個自定義序列化程序,以對無效對象和有效對象進行不同的序列化。 因此,我編寫了一個自定義序列化器,如下所示:

public class MySerializer extends JsonSerializer<MyObject> {

    @Override
    public void serialize(MyObject obj, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
        jgen.writeStartObject();
        if(obj.isValid()){
            jgen.writeObject(obj.getInvalids());
        }
        else{
            jgen.writeObject(obj);
        }
        jgen.writeEndObject();
    }
}

現在,當嘗試序列化時,如果無限遞歸,我會收到一個錯誤消息(原因很明確)。 所以我想知道是否可以在不必將代碼更改為類似的情況下執行此操作:

public class MySerializer extends JsonSerializer<MyObject> {

    @Override
    public void serialize(MyObject obj, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
        jgen.writeStartObject();
        if(obj.isValid()){
            jgen.writeObject(obj.getInvalids());
        }
        else{
            jgen.writeObjectField("prop1", obj.getProp1());
            jgen.writeObjectField("prop2", obj.getProp2());
            ...
        }
        jgen.writeEndObject();
    }
}

是否有一種更干凈(且較不煩人)的方式來完成我要嘗試的操作? 我已經看到了對類似問題的答案,但這非常簡潔,我無法從中找到明確的解決方案。

訪問“默認”序列化程序(如果您不提供自定義序列號,則將由Jackson生成)的訪問方式是注冊BeanSerializerModifier (使用SimpleModule進行注冊),然后重寫modifySerializer() 它具有默認的序列化程序,然后您可以構造自己的序列化程序,然后在合適的時候委托它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM