Skip to content

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

Open
@pakorcz

Description

@pakorcz

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<String, WorthSeeing> places;  
}  
  
static class ListOfPlaces extends ArrayList<WorthSeeing> 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    polymorphic-deductionIssues related to "Id.DEDUCTION" mode of `@JsonTypeInfo`

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions