że mam następujące klasy:Co to jest deserializacja Jackson odpowiednik @ JsonUnwrapped?
public class Parent {
public int age;
@JsonUnwrapped
public Name name;
}
produkujących JSON:
{
"age" : 18,
"first" : "Joey",
"last" : "Sixpack"
}
Jak deserializować to z powrotem do klasy nadrzędnej? Mógłbym 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 dominującej, jak wszystkie właściwości map tutaj. Jeśli więc chcesz, aby nieznane pola JSON rzuciły wyjątek, musisz to zrobić samodzielnie. Ponadto, jeśli wartości map mogłyby być inne niż ciągi znaków, konieczne byłoby ręczne sprawdzenie i konwersja typów. Czy istnieje sposób, aby Jackson poradził sobie z tą sprawą automatycznie?
Edit: mogę być szalony, ale to rzeczywiście wydaje się działać pomimo nigdy nie są wyraźnie wymienione w dokumentacji: http://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonUnwrapped.html
Byłem pewien, że nie działa na mnie wcześniej. Mimo to proponowane podejście @JsonCreator może być preferowane, gdy niestandardowa logika jest wymagana do deserializacji nieopakowanych typów polimorficznych.
Czy jesteś pewien, że '@ JsonUnwrapped' działa w celu deserializacji? Właśnie wypróbowałem to i dostaję "Nie mogłem odczytać błędów JSON: Nierozpoznane pole ..." kiedy próbuję deserializować spłaszczony JSON. –