package Ġexamples . pol ymorphic Models . models Ċ Ċ import Ġcom . fasterxml . jackson . annotation . JsonProperty Ċ import Ġcom . fasterxml . jackson . annotation . Json Sub Types Ċ import Ġcom . fasterxml . jackson . annotation . Json TypeInfo Ċ import Ġjavax . validation . constraints . NotNull Ċ import Ġkotlin . Int Ċ import Ġkotlin . String Ċ Ċ @ Json TypeInfo ( ĊĠĠĠ Ġuse Ġ= ĠJson TypeInfo . Id . NAME , ĊĠĠĠ Ġinclude Ġ= ĠJson TypeInfo . As . EXIST ING _ PROPERTY , ĊĠĠĠ Ġproperty Ġ= Ġ" generation ", ĊĠĠĠ Ġvisible Ġ= Ġtrue Ċ ) Ċ @ Json Sub Types ( ĊĠĠĠ ĠJson Sub Types . Type ( ĊĠĠĠĠĠĠĠ Ġvalue Ġ= ĠPol ymorphic Type One :: class , ĊĠĠĠĠĠĠĠ Ġname Ġ= ĊĠĠĠĠĠĠĠ Ġ" Pol ymorphic Type One " ĊĠĠĠ Ġ), ĊĠĠĠ ĠJson Sub Types . Type ( ĊĠĠĠĠĠĠĠ Ġvalue Ġ= ĠPol ymorphic Type Two :: class , ĊĠĠĠĠĠĠĠ Ġname Ġ= ĊĠĠĠĠĠĠĠ Ġ" Pol ymorphic Type Two " ĊĠĠĠ Ġ) Ċ ) Ċ sealed Ġclass ĠPol ymorphic Super Type ( ĊĠĠĠ Ġopen Ġval ĠfirstName : ĠString , ĊĠĠĠ Ġopen Ġval ĠlastName : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġabstract Ġval Ġgeneration : ĠString Ċ } Ċ Ċ data Ġclass ĠPol ymorphic Type One ( ĊĠĠĠ Ġ@ param : JsonProperty (" first _ name ") ĊĠĠĠ Ġ@ get : JsonProperty (" first _ name ") ĊĠĠĠ Ġ@ get : NotNull ĊĠĠĠ Ġoverride Ġval ĠfirstName : ĠString , ĊĠĠĠ Ġ@ param : JsonProperty (" last _ name ") ĊĠĠĠ Ġ@ get : JsonProperty (" last _ name ") ĊĠĠĠ Ġ@ get : NotNull ĊĠĠĠ Ġoverride Ġval ĠlastName : ĠString , ĊĠĠĠ Ġ@ param : JsonProperty (" child _ one _ name ") ĊĠĠĠ Ġ@ get : JsonProperty (" child _ one _ name ") ĊĠĠĠ Ġval Ġchild One Name : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠPol ymorphic Super Type ( firstName , ĠlastName ) Ġ{ ĊĠĠĠ Ġ@ get : JsonProperty (" generation ") ĊĠĠĠ Ġ@ get : NotNull ĊĠĠĠ Ġoverride Ġval Ġgeneration : ĠString Ġ= Ġ" Pol ymorphic Type One " Ċ } Ċ Ċ data Ġclass ĠPol ymorphic Type Two ( ĊĠĠĠ Ġ@ param : JsonProperty (" first _ name ") ĊĠĠĠ Ġ@ get : JsonProperty (" first _ name ") ĊĠĠĠ Ġ@ get : NotNull ĊĠĠĠ Ġoverride Ġval ĠfirstName : ĠString , ĊĠĠĠ Ġ@ param : JsonProperty (" last _ name ") ĊĠĠĠ Ġ@ get : JsonProperty (" last _ name ") ĊĠĠĠ Ġ@ get : NotNull ĊĠĠĠ Ġoverride Ġval ĠlastName : ĠString , ĊĠĠĠ Ġ@ param : JsonProperty (" some _ integer _ proper y ") ĊĠĠĠ Ġ@ get : JsonProperty (" some _ integer _ proper y ") ĊĠĠĠ Ġval Ġsome Integer Pro per y : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġ@ param : JsonProperty (" child _ two _ age ") ĊĠĠĠ Ġ@ get : JsonProperty (" child _ two _ age ") ĊĠĠĠ Ġval Ġchild Two Age : ĠInt ? Ġ= Ġnull Ċ ) Ġ: ĠPol ymorphic Super Type ( firstName , ĠlastName ) Ġ{ ĊĠĠĠ Ġ@ get : JsonProperty (" generation ") ĊĠĠĠ Ġ@ get : NotNull ĊĠĠĠ Ġoverride Ġval Ġgeneration : ĠString Ġ= Ġ" Pol ymorphic Type Two " Ċ } Ċ Ċ data Ġclass ĠAnother Object ( ĊĠĠĠ Ġ@ param : JsonProperty (" some _ integer _ proper y ") ĊĠĠĠ Ġ@ get : JsonProperty (" some _ integer _ proper y ") ĊĠĠĠ Ġval Ġsome Integer Pro per y : ĠInt ? Ġ= Ġnull Ċ ) Ċ