我有问题与使用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字段应该始终是驼峰格式。有没有什么办法可以强制执行这样的字段/属性命名策略并使用它们而不为每个字段添加相应的属性?
答案 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);