У меня есть устаревший JSON класс API, который я развиваю для удаления определенного свойства. В настоящее время он находится в точке, где значение свойства всегда является одной и той же константой, поэтому я хотел бы, чтобы мой код Java был простым getter
без базового поля для него. Я хочу продолжать сериализацию значения, пока не узнаю, что все мои клиенты перешли от использования значения. Объект читается только моими клиентами, поэтому мне не нужно беспокоиться о том, что они отправляют другие значения.
public class MyType {
private String value;
public boolean isLegacyValue() {
return true;
}
}
Тем не менее, я не хочу, чтобы какой-либо тестовый код или что-либо подобное проваливалось, если Я десериализирую полное значение с помощью свойства now-constant. Есть ли способ, которым я могу сказать Джексону сериализовать свойство только для метода установки, но игнорировать его при десериализации? Я пробовал несколько разных вещей, но я получаю UnrecognizedPropertyException
на десериализацию. Я бы предпочел не изменять глобальный DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
только для этого одного свойства.
{"value": "ABC", "legacyValue": true}
Также приемлемым был бы способ указать Джексону включать значение без включения поля Java для него.
Я знаю, что могу добавить геттер в дополнение к своему сеттеру или сделать его полем, но обе эти опции чувствуют, что они путают API Java, так как он фактически не соответствует постоянному ограничению :
public void setLegacyValue(boolean legacyValue) {
// No-op; only exists for Jackson deserialization
}
Одна вещь, которую я нашел, чтобы работать методом проб и ошибок, - это сделать это последнее поле. По какой-то причине Джексон знает, что обрабатывать это как постоянную только для записи способом, который не работает с геттером без соответствующего установщика. Это будет моим решением, если нет способа сделать это только с помощью геттера.
private final boolean legacyValue = true;
public boolean isLegacyValue() {
return legacyValue;
}