2012-07-04 60 views
1

告訴傑克遜不序列化特定吸氣劑方法的最簡單方法是什麼?我只想說明確的一個消氣,因爲我有一個自定義的,複雜的類,並且所有的setter和getter應有的功能,只有一個不應該:傑克遜反序列化特定吸氣劑關閉

mapper.configure(SerializationConfig.Feature.AUTO_DETECT_GETTERS, true); 

因此,這不是正確的方式。我要告訴大家,我不希望使用某個獲取這個類:

public static class EventRow implements Serializable, Cloneable, GRSerializable { 
    public int x 
    public int y 
    public double z 
    public String eventKeyValuesPacked; 

    //This getter should not be used, because there is no explicit setter 
    //for this, and also no public... And it is only unpack 
    //EventKeyValuesPacked so it would be multiple data... 
    public KeyValue[] getEventKeyValues() { 
     KeyValue[] kvs = DA_EventKey.unpackKeyValues(eventKeyValuesPacked); 
     return kvs == null ? new KeyValue[0] : kvs; 
    } 
} 

是否有任何註釋或SerializationConfig選項,以使無形getEventKeyValues() getter方法?

回答

1

有一個註釋:@JsonIgnore

@JsonIgnore 
public KeyValue[] getEventKeyValues() { 
... 

如果你不想爲此使用註釋,那麼你需要寫一個custom serializer

+0

謝謝,我發現它有點秒,但更奇怪:沒有註釋?有沒有其他的選擇?我不想寫這個「@JsonIgnore 」EventRow類,因爲它用於很多方面,不想讓其他的ppl看到我的搞亂,所以任何Serialization.config選項或...?:S – czupe

0

我覺得這幾乎做到這一點:

objectMapper.configure(DeserializationConfig.FAIL_ON_UNKNOWN_PROPERTIES, 假);

+0

請注意,這是一個DEserialization配置選項 - 不用於序列化配置。其目的是在JSON包含Java數據結構中沒有匹配屬性的元素被反序列化爲的情況下不會拋出異常。 –

2

什麼是最簡單的方式告訴傑克遜不序列特定的getter方法 ... 沒有標註?

無需編寫客戶串行...

如果直接註釋字段/屬性/的getter/setter跳過是不可取的,另一種方法是利用the Jackson Mix-In feature

另一種串行化方法只能使用the Jackson JSON Views feature,雖然這也需要一些容量的註釋。

0

這可能取決於傑克遜版本 - 在1.9之前,getter和setter是分別處理的,所以沒有自動檢測的getter就足夠了。但1.9以及更高版本,setter/getter/field都被合併爲邏輯屬性,這可能會讓Jackson從setter中推斷財產的存在。

所以你可能需要做的是也禁用設置器檢測。已經提供的其他選項也會起作用,混合註釋是實現此目的的常用方法。

0

objectMapper.configure(SerializationConfig.Feature.AUTO_DETECT_GETTERS,false);