Указание политики именования полей для Джексона - PullRequest
8 голосов
/ 02 марта 2012

У меня есть вопрос, связанный с сериализацией / десериализацией bean to json с использованием Jackson. Ранее я использовал 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-компонентов всегда должны быть camelCased. Можно ли как-нибудь принудительно применять такие политики именования полей / атрибутов и использовать их без указания соответствующих атрибутов для каждого поля?

1 Ответ

12 голосов
/ 02 марта 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...