Скажем, у меня есть следующий класс:
public class Parent {
public int age;
@JsonUnwrapped
public Name name;
}
Создание JSON:
{
"age" : 18,
"first" : "Joey",
"last" : "Sixpack"
}
Как мне отделить эти слова от класса Parent? Я мог бы использовать @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 может быть предпочтительным, когда пользовательская логика требуется для десериализации разворачиваемых полиморфных типов.