Настройка сериализации имени поля в Jackson Object Mapper

1

Скажем, у меня есть фасоль:

public class MyBean {
    public String oneMississipi;
    public int myBestFriend;
    //Getters&Setters&Bears,Oh my.
}

И я использую com.fasterxml.Jackson DataBinding, чтобы преобразовать экземпляры этого pojo в json-выход... Как настроить сериализацию имен полей, и может ли это быть привязано к глобальному/классу/полевому уровню?

например, я хотел бы определить имена моих полей:

{
    "one-mississipi": "two mississippi",
    "my-best-friend": 42
}

Я уже провел часы в Google и даже пробирался через код Джексона, чтобы узнать, где происходит сериализация поля, но не может показаться нигде, что он может делегировать для пользовательской обработки поля.

Есть ли у кого-нибудь идеи относительно того, где эта функциональность существует, если таковая имеется? Очень признателен

  • 0
    Вы смотрели в @JsonProperty ?
  • 1
    Похоже, это дает мне то, что мне нужно для каждого свойства самого класса, однако мне нужно что-то более изолированное от моей модели, которое я могу применить по всем направлениям, не загрязняя мою модель миллионами @JsonPropertys
Показать ещё 2 комментария
Теги:
jackson

1 ответ

4
Лучший ответ

Внесите PropertyNamingStrategy и внутри методов разрешения используйте AnnotatedMethod, AnnotatedField или AnnotatedParameter чтобы получить класс объявления. Затем вы можете искать любую пользовательскую аннотацию в этом классе и применять любое пользовательское именование в зависимости от этого.

Самая большая проблема с этим подходом заключается в том, что невозможно, чтобы фактический конкретный класс был сериализован или десериализован, он всегда будет возвращать класс объявления. Таким образом, невозможно будет переопределить поведение именования в подтипах для унаследованных членов, если вы не введете их в подтип.

Другим решением будет использование разных карт для классов с разными стратегиями именования. Вы можете сделать его более или менее прозрачным, создав сопоставитель верхнего уровня "маршрутизатор", который будет решать, какой экземпляр сопоставления использовать (необходимо особое внимание уделять методам настройки и другим методам, не связанным с ser/deser). Предполагая, что у вас будет конечное число стратегий, это решение также должно быть работоспособным.

Недостатком этого решения является то, что вы не сможете смешивать разные стратегии именования во время одного сеанса сериализации/десериализации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню