Десериализация Джексона в подкласс с дополнительным параметром

У меня есть вопрос о десериализации Джексона, например, у нас есть родительский класс foo и подкласс bar:

@JsonTypeInfo(use = JsonTypeInfo.Id.Name, include = JsonTypeInfo.As.PROPERTY,
property = "bar", visible = true)
@JsonSubTypes( { 
  @Type(value = Foo.class, bar = ""),
  @Type(value = Bar.class, bar = "true")
})
public class Foo{ String value; }

public class Bar extends Foo { boolean bar; }

подкласс поставляется в формате json как:

{ 
"value": "this is some value for bar class",
"bar": "true"
}

но мне нужно, чтобы Джексон десериализовал класс foo, и он должен идентифицировать это логическое значение в дочернем классе. Потому что запрос может прийти как

{ "value": "this is some foo class value" }

1 ответ

  1. Надеюсь, это кому-то пригодится.

        @JsonTypeInfo(
            use = JsonTypeInfo.Id.Name, 
          // this will ignore boolean bar value in the parent
            include = JsonTypeInfo.As.EXISTING_PROPERTY,
            property = "bar",
          // this will make a default implementation
            defaultImpl = Foo.class)
        @JsonSubTypes( {@Type(value = Bar.class, name = "true") })
        public class Foo{ String value; }
    
        public class Bar extends Foo { boolean bar; }