Скажем, у меня есть следующий класс:Что такое десериализация Джексона, эквивалентная @JsonUnwrapped?
public class Parent {
public int age;
@JsonUnwrapped
public Name name;
}
, производящего JSON:
{
"age" : 18,
"first" : "Joey",
"last" : "Sixpack"
}
Как десериализации это обратно в родительский класс? Я мог бы использовать @JsonCreator
@JsonCreator
public Parent(Map<String,String> jsonMap) {
age = jsonMap.get("age");
name = new Name(jsonMap.get("first"), jsonMap.get("last"));
}
Но это также эффективно добавляет @JsonIgnoreProperties(ignoreUnknown=true)
к классу Parent, так как все свойства отображения, чтобы здесь. Поэтому, если вы хотите, чтобы неизвестные поля JSON генерировали исключение, вы должны сделать это сами. Кроме того, если значения карты могут быть чем-то иным, чем Strings, вам придется выполнить ручную проверку и преобразование типов. Есть ли способ Джексона справиться с этим случаем автоматически?
Edit: я мог бы быть сумасшедшим, но это на самом деле, кажется, работает, несмотря на не будучи явно сказано в документации: http://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonUnwrapped.html
Я был уверен, что он не работает для меня ранее. Тем не менее, предложенный подход @JsonCreator может быть предпочтительным, когда пользовательская логика требуется для десериализации разворачиваемых полиморфных типов.
Вы уверены, что '@ JsonUnwrapped' работает для десериализации? Я просто попробовал, и я получаю ошибки 'Could not read JSON: Unrecognized field ... ', когда я пытаюсь десериализировать сплющенный JSON. –