2016-08-02 53 views
1

我有基類BaseItem像傑克遜默認的序列

@JsonSerialize(using = MyCustomSerializer.class) 
class BaseItem { 
    ... 
} 

然後我有一個像

@JsonSerialize(using = ???.class) 
class DerivedItem extends BaseItem { 
    ... 
} 

DerivedItem類如何使DerivedItem使用默認傑克遜串行?如果那是不可能的,那麼我怎樣才能使自定義序列化程序作爲默認的序列化程序?

回答

1

請嘗試以下

@JsonSerialize(using = JsonSerializer.None.class) 
class DerivedItem extends BaseItem { 
    ... 
} 

這應該告知傑克遜使用自定義序列的基礎項目,但不是DerivedItem。

編輯:證據是在布丁

BaseItem.java

@JsonSerialize(using = BaseSerializer.class) 
    public class BaseItem { 
    public BaseItem(int x) { 
     this.x = x; 
    } 
    public int getX() { 
     return x; 
    } 
    public void setX(int x) { 
     this.x = x; 
    } 

    int x; 
    } 

DerivedItem.java

@JsonSerialize(using = JsonSerializer.None.class) 
    public class DerivedItem extends BaseItem { 
    public DerivedItem(int x, int y) { 
     super(x); 
     this.y = y; 
    } 

    public int getY() { 
     return y; 
    } 
    public void setY(int y) { 
     this.y = y; 
    } 

    int y; 
    } 

是轉換一個數字,表示一個布爾愚蠢的自定義序列,如果它一個正數。

public class BaseSerializer extends JsonSerializer<BaseItem> { 
    @Override 
    public void serialize(BaseItem value, 
          JsonGenerator jgen, 
          SerializerProvider provider) throws IOException { 
     jgen.writeStartObject(); 
     jgen.writeBooleanField("x", value.getX() > 0); 
     jgen.writeEndObject(); 
    } 
    } 

讓我們嘗試一下

public static void main(String[] args) { 
    ObjectMapper mapper = new ObjectMapper(); 
    BaseItem baseItem = new BaseItem(1); 
    DerivedItem derivedItem = new DerivedItem(1,2); 
    System.out.println("Base Item: " + mapper.writeValueAsString(baseItem)); 
    System.out.println("Derived Item: " + mapper.writeValueAsString(derivedItem)); 
    } 

輸出:

Base Item:{"x":true} 
Derived Item:{"x":1,"y":2} 
+0

太謝謝你了! –