package Ġcom . github . kon f ko . jackson Ċ Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Feature Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . github . kon f ko . core . Conversion Request Ċ import Ġcom . github . kon f ko . core . Settings Type Converter Ċ import Ġcom . github . kon f ko . core . Type Converter Factory Ċ Ċ /** Ċ Ġ* Ġ@ author Ġmark opi Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠConverts Ġvalues Ġto Ġprovided Ġtype , Ġusing Ġprovided Ġj ack son Ġ[ ObjectMapper ]. Ċ Ġ* Ċ Ġ* ĠNote Ġthat Ġonce Ġthis Ġconverter Ġis Ġselected , Ġany Ġconversion Ġof Ġsub Ġvalues Ġwill Ġbe Ġdone Ġusing Ġby Ġj ack son Ġonly . Ċ Ġ* Ċ Ġ* ĠFor Ġexample : Ċ Ġ* Ġconverting Ġto Ġsettings Ġclass ĠAlarm ( val Ġmessage : ĠString , Ġval Ġtime : ĠZ onedDateTime ), Ġmessage Ġand Ġtime Ċ Ġ* Ġsettings Ġwill Ġbe Ġconverted Ġusing Ġj ack son ĠObjectMapper . ĠThere Ġis Ġno Ġfallback Ġback Ġto Ġthe ĠSettings Mapper 's Ġtype Ġconverter Ċ Ġ* Ċ Ġ*/ Ċ open Ġclass ĠJack son Type Converter ( val Ġmapper : ĠObjectMapper ) Ġ: ĠSettings Type Converter Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcan Convert ( source Type : ĠClass <* >, Ġtarget Type : ĠClass < *> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmapper . can Serialize ( source Type ) Ġ&& Ġmapper . can Deserialize ( mapper . type Factory . construct Type ( target Type )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< F Ġ: ĠAny , ĠT Ġ: ĠAny > ĠconvertTo ( value : ĠF , Ġtarget Type : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmapper . convert Value ( value , Ġtarget Type ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDefault Ġj ack son Ġtype Ġconverter . ĠThis Ġinstance Ġis Ġthe Ġone Ġfound Ġby Ċ Ġ* Ġ[ com . github . kon f ko . core . Configurable Settings Type Converter ] Ġwhen Ġthis Ġjar Ġis Ġincluded Ġin Ġclasspath Ċ Ġ*/ Ċ object ĠDefault Jack son Type Converter Ġ: ĠJack son Type Converter ( default ObjectMapper Converter ()) Ġ{ Ċ } Ċ Ċ private Ġfun Ġdefault ObjectMapper Converter () Ġ= ĠObjectMapper (). apply Ġ{ ĊĠĠĠ Ġfind And Register Modules () ĊĠĠĠ Ġconfigure ( Deserialization Feature . FAIL _ ON _ UNKNOWN _ PROPERTIES , Ġfalse ) Ċ } ĊĊ Ċ internal Ġclass ĠJack son Type Converter Factory Ġ: ĠType Converter Factory < Any , ĠAny > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġsource Type : ĠClass < *> Ġ= ĠAny :: class . java ĊĠĠĠ Ġoverride Ġval Ġtarget Type : ĠClass < *> Ġ= ĠAny :: class . java ĊĠĠĠ Ġ// Ġtodo Ġregistering Ġcustom Ġtype Ġconverter s Ġshould Ġreally Ġbe Ġdone Ġbetter ĊĠĠĠ Ġoverride Ġval Ġconverter : Ġ( Conversion Request < Any , ĠAny >) Ġ-> ĠAny ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ{ Ġrequest Ġ-> ĠDefault Jack son Type Converter . convertTo ( request . from , Ġrequest . target Type ) Ġ} Ċ Ċ }