Вывести новое поле из существующего поля по сериализации Джексона? - PullRequest
1 голос
/ 07 ноября 2019

У меня есть поле 'state' в классе 'Location'.

public class Location {
   private String state = "TX";

   // getters / setters
}

При сериализации Джексона в JSON я хотел бы добавить поле с тем же значением, что и поле 'state',так что обратная совместимость сохраняется с устаревшими клиентами, которые ожидают поле 'st8'. JSON будет выглядеть следующим образом:

{
  "state": "TX",
  "st8": "TX"
}

Я изучил аннотацию @JsonAppend, но, похоже, для этого необходимы какие-то странные манипуляции, которые мне неудобно добавлять в код:

Location bean = new Location("TX")
ObjectWriter writer = mapper.writerFor(Location.class).withAttribute("st8", "TX");
String jsonString = writer.writeValueAsString(bean);

Если я вынужден использовать этот подход, как бы я использовал его в API, поскольку он имеет дело исключительно с POJO / DTO, и сериализация все обрабатывается магическим образом?

1 Ответ

3 голосов
/ 07 ноября 2019

Вы можете создать дополнительный метод получения для этого поля, и Jackson автоматически его сериализует:

class Location {
    private String state = "TX";

    public String getState() {
        return state;
    }

    /**
     * backward compatibility
     */
    public String getSt8() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...