Jaki jest odpowiednik deserializacji Jacksona dla @JsonUnwrapped?

Powiedz, że mam następującą klasę:

public class Parent {
  public int age;
  @JsonUnwrapped
  public Name name;
}

Produkcja JSON:

{
  "age" : 18,
  "first" : "Joey",
  "last" : "Sixpack"
}

W jaki sposób mogę sprzeniewierzyć to z powrotem do klasy nadrzędnej? Mogę użyć @JsonCreator

@JsonCreator
public Parent(Map<String,String> jsonMap) {
  age = jsonMap.get("age");
  name = new Name(jsonMap.get("first"), jsonMap.get("last"));
}

Ale to również skutecznie dodaje@JsonIgnoreProperties(ignoreUnknown=true) do klasy nadrzędnej, jak wszystkie mapy właściwości tutaj. Więc jeśli chcesz, aby nieznane pola JSON rzucały wyjątek, musisz to zrobić sam. Ponadto, jeśli wartości map mogą być czymś innym niż ciągi znaków, należy wykonać ręczne sprawdzanie typu i konwersję. Czy istnieje sposób, aby Jackson mógł obsłużyć tę sprawę automatycznie?

Edytować: Mogę być szalony, ale wydaje się, że działa, mimo że nigdy nie został wyraźnie wymieniony w dokumentacji:http://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonUnwrapped.html
Byłem całkiem pewien, że wcześniej mi się nie udało. Mimo to proponowane podejście @JsonCreator może być preferowane, gdy wymagana jest niestandardowa logika do deserializacji nieopakowanych typów polimorficznych.

questionAnswers(3)

yourAnswerToTheQuestion