package Ġnet . jp . v ss . visit scheduler . constr ains Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġjava . io . IOException Ċ import Ġjavax . validation . Constraint Ċ import Ġjavax . validation . Constraint Validator Ċ import Ġjavax . validation . Constraint Validator Context Ċ import Ġjavax . validation . Payload Ċ import Ġjavax . validation . Report As Single Violation Ċ import Ġjavax . validation . constraints . Pattern Ċ import Ġkotlin . annotation . Must Be Document ed Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠJSON Ġ æĸĩåŃĹåĪĹ ãģ® Ġvalidate ĠãĤ¢ ãĥİ ãĥĨ ãĥ¼ãĤ·ãĥ§ãĥ³ . Ċ Ġ* Ċ Ġ* Ġ@ property Ġmessage Ġmessage Ċ Ġ* Ġ@ property Ġgroups Ġgroups Ċ Ġ* Ġ@ property Ġpayload Ġpayload Ċ Ġ*/ Ċ @ Must Be Document ed Ċ @ Target ( Annotation Target . FIELD ) Ċ @ Retention ( Annotation Retention . RUNTIME ) Ċ @ Constraint ( validated By Ġ= Ġ[ Json String Constr ains n Validator :: class ]) Ċ @ Report As Single Violation Ċ @ Pattern ( regexp Ġ= Ġ". { 0 , 6 5 5 3 6 }", Ġflags Ġ= Ġ[ Pattern . Flag . DOT ALL ]) Ċ annotation Ġclass ĠJson String Constr ains ( ĊĠĠĠ Ġval Ġmessage : ĠString Ġ= Ġ" must Ġmatch Ġjson Ġstring Ġformat ", ĊĠĠĠ Ġval Ġgroups : ĠArray < K Class < out ĠAny >> Ġ= Ġ[], ĊĠĠĠ Ġval Ġpayload : ĠArray < K Class < out ĠPayload >> Ġ= Ġ[] Ċ ) Ċ Ċ /** Ċ Ġ* ĠJSON Ġ æĸĩåŃĹåĪĹ ãģ® Ġvalidate Ġæľ¬ ä½ĵ . Ċ Ġ*/ Ċ class ĠJson String Constr ains n Validator Ġ: ĠConstraint Validator < Json String Constr ains , ĠString > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠobjectMapper Ġ= ĠObjectMapper () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisValid ( value : ĠString ?, Ġcontext : ĠConstraint Validator Context ?): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnode Ġ= ĠobjectMapper . read Tree ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ!= Ġnull Ġ&& Ġnode . isObject ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ