Учитывая, что объект JSON имеет свойство mutable (например, метка), которое может быть либо примитивным значением (например, строкой), либо объектом. Гипотетический вариант использование может быть оберткой для множественного перевода метки:Свойство JSON для удаления объекта с объектом Jackson
{
"label": "User name"
}
или
{
"label": {
"one": "A label",
"other": "The labels"
}
}
Цель состоит в том, чтобы принести Jackson десериализации всегда возвращает фиксированную структуру на Java стороне. Таким образом, если примитивно значение придается оно всегда переводится на определенное имущество (например, другой) целевого POJO, то есть:
public class Translations {
@JsonDeserialize(using = PluralizedTranslationDeserializer.class)
public PluralizedTranslation label;
}
public class PluralizedTranslation {
public String one;
public String other; // used as default fields for primitive value
}
В настоящее время решается вопрос с помощью пользовательского JsonDeserializer
, который проверяет, является ли свойство примитива или нет:
public class PluralizedTranslationDeserializer extends JsonDeserializer {
@Override
public PluralizedTranslation deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
ObjectCodec oc = jsonParser.getCodec();
JsonNode node = oc.readTree(jsonParser);
PluralizedTranslation translation;
if (node.isTextual()) {
translation = new PluralizedTranslation();
translation.other = node.asText();
} else {
translation = oc.treeToValue(node, PluralizedTranslation.class);
}
return translation;
}
}
есть ли более элегантный подход для обработки изменяемых свойств JSON без необходимости декодер, который работает на уровне узла?
Этот вопрос не имеет ничего общего с изменчивостью. У вас только есть свойство и вы хотите каким-то образом десериализовать его. –
@ Miha_x64 Я описал значение свойства как изменяемое, потому что тип его значения имеет [«ответственность или тенденция к изменению»] (https://en.oxforddictionaries.com/definition/mutability). Извините за вводящее в заблуждение прилагательное, вопрос, конечно, не связан с изменением объекта (Java). – dim