指定Jackson的字段命名策略

Bor*_*jev 8 java json jackson

我有问题与使用杰克逊的bean到json序列化/反序列化有关.以前我用GSON要做到这一点,但现在我面对的已经依赖于杰克逊一个项目,我宁愿不引进新的依赖,如果我可以用我已经在做手工.

所以想象我有一个像这样的豆:

class ExampleBean {
   private String firstField;
   private String secondField;
   // respective getters and setters
}
Run Code Online (Sandbox Code Playgroud)

然后杰克逊将其序列化为:

{
   "firstField": "<first_field_value>",
   "secondField": "<second_field_value>"
}
Run Code Online (Sandbox Code Playgroud)

我使用以下代码生成上述结果:

ExampleBean bean;
...
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(outStream, bean);
Run Code Online (Sandbox Code Playgroud)

但是,我希望(我预期)获得以下序列化:

{
   "first_field": "<first_field_value>",
   "second_field": "<second_field_value>"
}
Run Code Online (Sandbox Code Playgroud)

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

Bor*_*jev 12

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

ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(
    PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
mapper.writeValue(outStream, bean);
Run Code Online (Sandbox Code Playgroud)

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

  • 对于使用最新 Jackson 的任何人,请使用“PropertyNamingStrategies”而不是“PropertyNamingStrategy”。我花了很长时间试图弄清楚为什么“PropertyNamingStrategy”被弃用以及用什么来替换它。 (4认同)