指定Jackson的字段命名策略

时间:2012-03-02 12:23:47

标签: java json jackson

我有问题与使用Jackson的bean到json序列化/反序列化有关。以前我用GSON来做这件事,但现在我面对的是一个已经取决于杰克逊的项目,如果我可以用我现有的东西,我宁愿不引入新的依赖。

所以想象我有一个类似豆子的东西:

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>"
}

我故意简化了我的例子,但是我想要序列化的bean有很大的层次结构,我想指定序列化的属性应该总是在snake_style中(带有下划线),并且相应的bean字段应该始终是驼峰格式。有没有什么办法可以强制执行这样的字段/属性命名策略并使用它们而不为每个字段添加相应的属性?

2 个答案:

答案 0 :(得分:12)

是的,我找到了它(结果发现,经过2个小时的搜索,我距离发现它只有30分钟):

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

希望这对其他人也有帮助。

答案 1 :(得分:0)

现在CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES是已弃用的策略,请改用SNAKE_CASE

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