Указание политики именования полей для Jackson

У меня есть вопрос, связанный с bean с json serialziation/deserialization, используя Jackson. Раньше я использовал GSON, чтобы сделать это, но теперь я столкнулся с проектом, который уже зависит от Джексона, и я бы предпочел не вводить новую зависимость, если я могу сделать то, что у меня уже есть.

Итак, представьте, что у меня есть bean как:

class ExampleBean {
 private String firstField;
 private String secondField;
 // respective getters and setters
}

И затем Джексон сериализует его:

{
 "firstField": "<first_field_value>",
 "secondField": "<second_field_value>"
}
</second_field_value></first_field_value>

Я использую следующий код для получения приведенного выше результата:

ExampleBean bean;
...
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(outStream, bean);

Однако я хотел бы (я ожидал) получить следующую сериализацию:

{
 "first_field": "<first_field_value>",
 "second_field": "<second_field_value>"
}
</second_field_value></first_field_value>

Я преднамеренно упростил свой пример, но у меня есть большая иерархия beans, которую я хочу сериализовать, и я хочу указать, что сериализованные атрибуты всегда должны быть в snake_style (то есть с символами подчеркивания) и соответствующем bean поля всегда должны быть camelCased. Можно ли каким-либо образом применять такие политики именования полей/атрибутов и использовать их без аннотации соответствующего атрибута для каждого поля?

1 ответ

И да, я нашел (оказалось, что после 2 часов поиска мне было всего 30 минут от его поиска):

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

Надеюсь, это окажется полезным и для кого-то другого.

licensed under cc by-sa 3.0 with attribution.