Java 指定Jackson的字段命名策略

Java 指定Jackson的字段命名策略,java,json,jackson,Java,Json,Jackson,我有一个关于使用Jackson进行bean到json序列化/反序列化的问题。以前我用GSON来做这件事,但现在我面对的是一个已经依赖于Jackson的项目,如果我能用手头上已有的东西来做的话,我宁愿不引入新的依赖关系 想象我有一个豆子,像: class ExampleBean { private String firstField; private String secondField; // respective getters and setters } 然后Jackso

我有一个关于使用Jackson进行bean到json序列化/反序列化的问题。以前我用GSON来做这件事,但现在我面对的是一个已经依赖于Jackson的项目,如果我能用手头上已有的东西来做的话,我宁愿不引入新的依赖关系

想象我有一个豆子,像:

class ExampleBean {
   private String firstField;
   private String secondField;
   // respective getters and setters
}
然后Jackson将其序列化为:

{
   "firstField": "<first_field_value>",
   "secondField": "<second_field_value>"
}
但是,我希望(预计)获得以下序列化:

{
   "first_field": "<first_field_value>",
   "second_field": "<second_field_value>"
}
{
“第一个_字段”:“,
“第二个_字段”:”
}
我特意简化了我的示例,但是我有一个大的bean层次结构,我想要序列化,并且我想要指定序列化的属性应该始终是snake_样式(即带有下划线),并且对应的bean字段应该始终是大小写的。是否有任何方法可以强制执行此类字段/属性命名策略,并在不注释每个字段对应属性的情况下使用它们?

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


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

现在
驼色字母大写字母到小写字母大写字母加下划线
是不推荐使用的策略,请改用
蛇形字母大写字母

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

ObjectMapper似乎没有这样的方法setPropertyNamingStrategy…:(@stantonk曾经是我写评论的时候。显然它是为Jackson 1.9写的。但是,我在最近的Jackson库中找不到类似的版本。如果你找到了,请在这里写一个答案,这样人们就可以参考它了。我发现,我有一个旧版本的Jackson通过传递依赖项被包括在内,而my IDE导入了错误的一个:-)。您可以使用com.fasterxml.jackson.core jackson databind 2.3.1使其工作
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(
    PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
mapper.writeValue(outStream, bean);
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(
    PropertyNamingStrategy.SNAKE_CASE);
mapper.writeValue(outStream, bean);