package Ġtop . fel ix u . exception Ċ Ċ import Ġorg . hibernate . validator . internal . engine . path . Path Impl Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . validation . Bind Exception Ċ import Ġorg . springframework . validation . FieldError Ċ import Ġorg . springframework . web . bind . Method Argument Not Valid Exception Ċ import Ġorg . springframework . web . bind . annotation . ExceptionHandler Ċ import Ġorg . springframework . web . bind . annotation . RestController Ad vice Ċ import Ġtop . fel ix u . enums . ErrorCode Ċ import Ġtop . fel ix u . model . dto . Resp DTO Ċ import Ġjava . text . Message Format Ċ import Ġjava . util .* Ċ import Ġjavax . servlet . http . HttpServletRequest Ċ import Ġjavax . validation . Constraint Violation Exception Ċ Ċ /** Ċ Ġ* Ġ@ author Ġfel ix u Ċ Ġ* Ġ@ since Ġ 2 0 2 1 . 0 4 . 0 7 Ċ Ġ*/ Ċ @ RestController Ad vice Ċ class ĠPlatform ExceptionHandler Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ èĩªå®ļä¹ī å¼Ĥå¸¸ å¤ĦçĲĨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ ExceptionHandler ( Platform Exception :: class ) ĊĠĠĠ Ġfun Ġplatform ExceptionHandler ( ex : ĠPlatform Exception , Ġrequest : ĠHttpServletRequest ): ĠResponseEntity < Resp DTO < Any >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror : ĠErrorCode Ġ= Ġex . error ĊĠĠĠĠĠĠĠ Ġvar Ġmessage : ĠString Ġ= Ġerror . message ĊĠĠĠĠĠĠĠ Ġif Ġ( Objects . non Null ( ex . args )) Ġmessage Ġ= ĠMessage Format . format ( message , Ġex . args ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity < Resp DTO < Any >>( Resp DTO . on Fail ( error . code , Ġmessage ), ĠHttpStatus . OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠéľĢè¦ģ è¢« å¤ĦçĲĨ çļĦ æł¡éªĮ å¼Ĥå¸¸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ ExceptionHandler ( Bind Exception :: class ) ĊĠĠĠ Ġfun Ġhandle Bind Exception ( ex : ĠBind Exception ): ĠResponseEntity < Resp DTO < Any >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity < Resp DTO < Any >>( Resp DTO . on Valid Fail ( ex ), ĠHttpStatus . OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ ExceptionHandler ( Method Argument Not Valid Exception :: class ) ĊĠĠĠ Ġfun Ġmethod Argument Not Valid Handler ( ex : ĠMethod Argument Not Valid Exception ): ĠResponseEntity < Resp DTO < Any >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity < Resp DTO < Any >>( Resp DTO . on Valid Fail ( ex . binding Result ), ĠHttpStatus . OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ ExceptionHandler ( Constraint Violation Exception :: class ) ĊĠĠĠ Ġfun Ġvalidation ExceptionHandler ( ex : ĠConstraint Violation Exception ): ĠResponseEntity < Resp DTO < Any >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġviolations Ġ= Ġex . constraint Vi olations ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠMutable Map < String , ĠString > Ġ= ĠHashMap ( vi olations . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( violation Ġin Ġviolations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfieldName Ġ= Ġ( violation . property Path Ġas ĠPath Impl ). leaf Node . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult [ fieldName ] Ġ= Ġviolation . message ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠBind Exception ( ex , Ġ" exception ") ĊĠĠĠĠĠĠĠ Ġresult . forEach Ġ{ Ġ( key : ĠString ?, Ġvalue : ĠString ?) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . add Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠField Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . objectName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey , Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity < Resp DTO < Any >>( Resp DTO . on Valid Fail ( exception . binding Result ), ĠHttpStatus . OK ) ĊĠĠĠ Ġ} Ċ }