package Ġcom . nl w . four . api . exception handler Ċ Ċ import Ġcom . nl w . four . api . exception handler . Problem . Problem Field Ċ import Ġcom . nl w . four . domain . exception . Business Exception Ċ import Ġcom . nl w . four . domain . exception . Model NotFoundException Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . context . Message Source Ċ import Ġorg . springframework . context . i 1 8 n . Locale Context Holder Ċ import Ġorg . springframework . http . HttpHeaders Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . validation . FieldError Ċ import Ġorg . springframework . web . bind . Method Argument Not Valid Exception Ċ import Ġorg . springframework . web . bind . annotation . Controller Ad vice Ċ import Ġorg . springframework . web . bind . annotation . ExceptionHandler Ċ import Ġorg . springframework . web . context . request . WebRequest Ċ import Ġorg . springframework . web . servlet . mvc . method . annotation . Response Entity ExceptionHandler Ċ import Ġjava . time . Offset DateTime Ċ import Ġjava . util .* Ċ Ċ @ Controller Ad vice Ċ class ĠApiException Handler ( ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġval Ġmessage Source : ĠMessage Source ? Ġ= Ġnull , Ċ ) Ġ: ĠResponseEntity ExceptionHandler () Ġ{ ĊĊĠĠĠ Ġ@ ExceptionHandler ( Model NotFoundException :: class ) ĊĠĠĠ Ġfun Ġhandle Entity NotFound ( ex : ĠBusiness Exception , Ġrequest : ĠWeb Request ?): ĠResponseEntity < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠHttpStatus . NOT _ FOUND ĊĠĠĠĠĠĠĠ Ġval Ġproblem Ġ= ĠProblem () ĊĠĠĠĠĠĠĠ Ġproblem . status Ġ= Ġstatus . value () ĊĠĠĠĠĠĠĠ Ġproblem . title Ġ= Ġex . message ĊĠĠĠĠĠĠĠ Ġproblem . dateTime Ġ= ĠOffset DateTime . now () ĊĠĠĠĠĠĠĠ Ġreturn Ġhandle Exception Internal ( ex , Ġproblem , ĠHttp Headers (), Ġstatus , Ġrequest !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ ExceptionHandler ( Business Exception :: class ) ĊĠĠĠ Ġfun Ġhandle Business ( ex : ĠBusiness Exception , Ġrequest : ĠWeb Request ?): ĠResponseEntity < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠHttpStatus . BAD _ REQUEST ĊĠĠĠĠĠĠĠ Ġval Ġproblem Ġ= ĠProblem () ĊĠĠĠĠĠĠĠ Ġproblem . status Ġ= Ġstatus . value () ĊĠĠĠĠĠĠĠ Ġproblem . title Ġ= Ġex . message ĊĠĠĠĠĠĠĠ Ġproblem . dateTime Ġ= ĠOffset DateTime . now () ĊĠĠĠĠĠĠĠ Ġreturn Ġhandle Exception Internal ( ex , Ġproblem , ĠHttp Headers (), Ġstatus , Ġrequest !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Method Argument Not Valid ( ĊĠĠĠĠĠĠĠ Ġex : ĠMethod Argument Not Valid Exception , ĊĠĠĠĠĠĠĠ Ġheaders : ĠHttp Headers , Ġstatus : ĠHttpStatus , Ġrequest : ĠWeb Request ĊĠĠĠ Ġ): ĠResponseEntity < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcampos Ġ= ĠArrayList < Problem Field >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( error Ġin Ġex . binding Result . all Errors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġ( error Ġas ĠField Error ). field ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġmessage Source !!. getMessage ( error , ĠLocale Context Holder . getLocale ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcampos . add ( Problem Field ( name , Ġmessage )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġproblem Ġ= ĠProblem () ĊĠĠĠĠĠĠĠ Ġproblem . status Ġ= Ġstatus . value () ĊĠĠĠĠĠĠĠ Ġproblem . title Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" One Ġor Ġmore Ġfields Ġare Ġinvalid . ĠFill Ġin Ġthe Ġfields Ġcorrectly Ġand Ġtry Ġagain ." ĊĠĠĠĠĠĠĠ Ġproblem . dateTime Ġ= ĠOffset DateTime . now () ĊĠĠĠĠĠĠĠ Ġproblem . fields Ġ= Ġcampos ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . handle Exception Internal ( ex , Ġproblem , Ġheaders , Ġstatus , Ġrequest ) ĊĠĠĠ Ġ} Ċ }