package Ġcom . dev ng . spark Ċ Ċ import Ġcom . ow like . gen son . Context Ċ import Ġcom . ow like . gen son . Converter Ċ import Ġcom . ow like . gen son . Gen son Builder Ċ import Ġcom . ow like . gen son . Json Binding Exception Ċ import Ġcom . ow like . gen son . stream . Json Stream Exception Ċ import Ġcom . ow like . gen son . stream . Object Reader Ċ import Ġcom . ow like . gen son . stream . Object Writer Ċ import Ġspark . Response Transformer Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . time . format . DateTime ParseException Ċ Ċ object ĠJson Util Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgen son Ġ= ĠGen son Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Indent ation ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Converter ( LocalDate Converter (), ĠLocalDate :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠ Ġfun ĠtoJson (` object `: ĠAny ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgen son . serialize (` object `) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġfrom Json ( json String : ĠString , Ġtype : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġgen son . deserialize ( json String , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġe ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠJson Stream Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġparse ĠJSON : Ġ" Ġ+ Ġjson String Ġ+ Ġ". ĠReason : Ġ" Ġ+ Ġex . message ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠJson Binding Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Could Ġnot Ġparse ĠJSON : Ġ" Ġ+ Ġjson String Ġ+ Ġ". ĠReason : Ġ" Ġ+ Ġex . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġjson (): ĠResponse Transformer Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse Transformer Ġ{ ĠtoJson ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠLocalDate Converter Ġ: ĠConverter < LocalDate > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( local Date : ĠLocalDate ?, Ġobject Writer : ĠObject Writer , Ġcontext : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( local Date Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Writer . writeString ( local Date . format ( DateTime Formatter . ISO _ LOCAL _ DATE )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( object Reader : ĠObject Reader , Ġcontext : ĠContext ): ĠLocalDate ? Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate String Ġ= Ġobject Reader . value AsString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( date String Ġ== Ġnull Ġ|| Ġdate String . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLocalDate . parse ( date String , ĠDateTime Formatter . ISO _ LOCAL _ DATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠDateTime ParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ