2012-03-02 105 views
8

我有問題涉及使用傑克遜bean到json序列化/反序列化。以前我用GSON來做到這一點,但現在我面對的是一個已經取決於傑克遜的項目,如果我可以處理已有的東西,我不希望引入新的依賴項。爲傑克遜指定字段命名策略

所以,想象我有這樣一個bean:

class ExampleBean { 
    private String firstField; 
    private String secondField; 
    // respective getters and setters 
} 

然後傑克遜將其序列化爲:

{ 
    "firstField": "<first_field_value>", 
    "secondField": "<second_field_value>" 
} 

我使用下面的代碼產生上述結果:

ExampleBean bean; 
... 
ObjectMapper mapper = new ObjectMapper(); 
mapper.writeValue(outStream, bean); 

不過,我想(預計)得到以下序列號:

{ 
    "first_field": "<first_field_value>", 
    "second_field": "<second_field_value>" 
} 

我刻意簡化我的例子,但我有我想序列豆大的層次,我想說明的是,序列化的屬性應始終snake_style(即用下劃線)和相應的豆田應該永遠是駱駝式的。有沒有什麼辦法可以強制實施這些字段/屬性命名策略,並在不註釋每個字段的相應屬性的情況下使用它們?

回答

11

是的,我發現它(原來有2小時的搜索後,我已經只有30分鐘的路程,從發現它):

ObjectMapper mapper = new ObjectMapper(); 
mapper.setPropertyNamingStrategy(
    PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); 
mapper.writeValue(outStream, bean); 

希望這將被證明是有用的給別人太。

+0

ObjectMapper似乎沒有setPropertyNamingStrategy這樣的方法...... :( – stantonk 2014-04-04 20:53:58

+0

@stantonk曾經是我寫評論的時候,顯然它在那裏是爲了傑克遜1.9,但是我並沒有在最近的傑克遜如果你這樣做,請在這裏回答一個答案,以便人們可以參考它 – 2014-04-06 16:18:08

+0

知道了,我有一個老版本的jackson被包含在傳遞依賴中,而我的IDE導入了錯誤的:-)。 – stantonk 2014-04-06 21:59:07