FasterXML / FasterXML/jackson-databind

Deduction deserialization - add support for pojo-hierarchies such that the absence of child fields infers a supertype

Ouverte
#3,289 20 commentaires 1 réaction 0 personnes assignées Voir sur GitHub
polymorphic-deduction
Langage dominant
Java
Étoiles
3.7k
Forks
1.5k
Merge moyen
3 j 6 h
PR mergées (30 j)
28

Description

Currently, deduction deserialization requires all values to have unique field. Because of that, there is no way to deserialize values to superclass and subclasses, when `defaultImpl` is different than superclass.

Example:

For json:
```{
"name": "Italy",
"places": {
"mountains": {
"name": "The Alps"
},
"cites": [
{
"name": "Rome",
"places": {
"colosseum": {
"name": "The Colosseum"
},
"romanForum": {
"name": "The Roman Forum"
}
}
},
{
"name": "Venice",
"places": {
"bridges": []
}
}
]
}
}
```

and pojo-hierarchy:

```
public static class Place implements WorthSeeing {
public String name;
}

public static class CompositePlace extends Place implements WorthSeeing {

public Map places;
}

static class ListOfPlaces extends ArrayList implements WorthSeeing {
}
```

and deduction deserialization with `defaultImpl` differ then supertype:

```
@JsonTypeInfo(use = DEDUCTION, defaultImpl = ListOfPlaces.class)
@JsonSubTypes( {@Type(ListOfPlaces.class), @Type(CompositePlace.class), @Type(Place.class)})
interface WorthSeeing {}
```

the `MismatchedInputException` is thrown, because the values with only `name` fields are not classified to `Place` .

Desired behaviour:
- value contains only fields from superclass -> it's mapped to an object of superclass
- value contains fields from superclass and a subclass -> it's mapped to an object of the supclass
- value contains fields from superclass and fields that don't exist in any of subclasses -> the `UnrecognizedPropertyException` is thrown

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.