22
33import com .answerdigital .answerking .exception .AnswerKingException ;
44import com .answerdigital .answerking .exception .custom .ValidationException ;
5- import com .answerdigital .answerking .exception .generic .BadRequestException ;
65import com .answerdigital .answerking .exception .generic .InternalServerErrorException ;
76import org .springframework .http .HttpStatus ;
87import org .springframework .http .ResponseEntity ;
8+ import org .springframework .validation .FieldError ;
99import org .springframework .web .bind .MethodArgumentNotValidException ;
1010import org .springframework .web .bind .annotation .ExceptionHandler ;
1111import org .springframework .web .bind .annotation .RestControllerAdvice ;
1515import javax .validation .ConstraintViolationException ;
1616import java .util .ArrayList ;
1717import java .util .Collection ;
18+ import java .util .Collections ;
1819import java .util .HashMap ;
1920import java .util .Map ;
2021import java .util .Objects ;
22+ import java .util .stream .Collectors ;
2123import java .util .stream .StreamSupport ;
2224
2325@ RestControllerAdvice
@@ -28,14 +30,17 @@ public ResponseEntity<ErrorResponse> handleMethodArgumentNotValidException(
2830 final MethodArgumentNotValidException exception ,
2931 final HttpServletRequest request ) {
3032
31- String detail ;
32- try {
33- detail = Objects .requireNonNull (exception .getFieldError ()).getDefaultMessage ();
34- } catch (NullPointerException nullPointerException ) {
35- detail = "Unknown error - MethodArgumentNotValidException was thrown with no default message" ;
36- }
33+ final Map <String , Collection <String >> errorsMap =
34+ exception .getBindingResult ().getFieldErrors ()
35+ .stream ()
36+ .collect (Collectors .toMap (FieldError ::getField ,
37+ FieldError -> new ArrayList <>(Collections .singletonList (FieldError .getDefaultMessage ())),
38+ (mainList , newList ) -> {
39+ mainList .addAll (newList );
40+ return mainList ;
41+ }));
3742
38- final ErrorResponse response = new ErrorResponse (new BadRequestException ( detail ), request );
43+ final ErrorResponse response = new ValidationErrorResponse (new ValidationException ( errorsMap ), request );
3944 return new ResponseEntity <>(response , HttpStatus .BAD_REQUEST );
4045 }
4146
0 commit comments