Вы можете переопределить метод handleMethodArgumentNotValid
в совете контроллера следующим образом (кажется, это тот случай использования, который вам нужен):
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
List<String> details = new ArrayList<>();
for(ObjectError error : ex.getBindingResult().getAllErrors()) {
details.add(error.getDefaultMessage());
}
ErrorResponse error = new ErrorResponse("Validation Failed", details);
return new ResponseEntity(error, HttpStatus.BAD_REQUEST);
}
В противном случае в вашем классе контроллера вы можете обработать его, вызвав специальное исключениеа затем обрабатываете его отдельно в рекомендации контроллера (не для исключения проверки, но для всех других исключений времени выполнения, этот подход предпочтителен для обработки исключения):
@PostMapping("/addValidate")
public String submitForm(@Valid ValidatedData validatedData,
BindingResult result, Model m) {
if(result.hasErrors()) {
List<FieldError> errors = bindingResult.getFieldErrors(); // provided only for your information
for (FieldError error : errors ) {
System.out.println (error.getObjectName() + " - " +error.getDefaultMessage());
}
throw new CustomExceptionClass("Your could assign the field error custom message here");
}
m.addAttribute("message", "Success"
+ validatedData.toString());
return "Home";
}
, а затем в классе рекомендаций контроллера вы можете использоватьэто сообщение передается в виде исключения:
@ExceptionHandler(Exception.class)
public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {
List<String> details = new ArrayList<>();
details.add(ex.getLocalizedMessage()); //just call the message method to get the message in the exception
ErrorResponse error = new ErrorResponse("Server Error", details); //Custom error response class to return json response
return new ResponseEntity(error, HttpStatus.INTERNAL_SERVER_ERROR);
}