2012-03-02 106 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