@ControllerAdvice
public class ApiValidationExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request
) {
BindingResult bindingResult = ex
.getBindingResult();
List<ApiFieldError> apiFieldErrors = bindingResult
.getFieldErrors()
.stream()
.map(fieldError -> new ApiFieldError(
fieldError.getField(),
fieldError.getCode(),
fieldError.getRejectedValue())
)
.collect(toList());
List<ApiGlobalError> apiGlobalErrors = bindingResult
.getGlobalErrors()
.stream()
.map(globalError -> new ApiGlobalError(
globalError.getCode())
)
.collect(toList());
ApiErrorsView apiErrorsView = new ApiErrorsView(apiFieldErrors, apiGlobalErrors);
return new ResponseEntity<>(apiErrorsView, HttpStatus.UNPROCESSABLE_ENTITY);
}
}
List<FieldError> errors = bindingResult.getFieldErrors();
for (FieldError error : errors ) {
System.out.println (error.getObjectName() + " - " + error.getDefaultMessage());
}
private String resolveBindingResultErrors(BindingResult bindingResult) {
return bindingResult.getFieldErrors().stream()
.map(fr -> {
String field = fr.getField();
String validationMessage = fr.getDefaultMessage();
return format("'%s': %s", field, validationMessage);
}).
.collect(joining(", "));
}
List<FieldError> errors = bindingResult.getFieldErrors();
for (FieldError error : errors ) {
System.out.println (error.getDefaultMessage());
}
@PostMapping(value = "/saveEmployee", produces = { MediaType.APPLICATION_JSON_VALUE })
@ResponseBody
public EmployeeJsonRespone saveEmployee(@ModelAttribute @Valid Employee employee,
BindingResult result) {
EmployeeJsonRespone respone = new EmployeeJsonRespone();
if(result.hasErrors()){
//Get error message
Map<String, String> errors = result.getFieldErrors().stream()
.collect(
Collectors.toMap(FieldError::getField, FieldError::getDefaultMessage)
);
respone.setValidated(false);
respone.setErrorMessages(errors);
}else{
// Implement business logic to save employee into database
//..
respone.setValidated(true);
respone.setEmployee(employee);
}
return respone;
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ResponseEntity<?> processHandler(MethodArgumentNotValidException ex) {
BindingResult bindingResult = ex.getBindingResult();
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
List<FieldErrorDto> fieldErrorDtos = fieldErrors.stream()
.map(FieldErrorDto::new)
.collect(Collectors.toList());
ValidationResultDto validationResultDto = new ValidationResultDto();
validationResultDto.setFieldErrors(fieldErrorDtos);
LOGGER.error("VALIDATION ERROR: " + ex.getMessage());
return ResponseEntity.badRequest().body(validationResultDto);
}
@RequestMapping(value = "/addTopic", method = RequestMethod.POST)
public String addTopic(@Valid @ModelAttribute ForumModel newForumModel, BindingResult bindingResult,
Model model) {
if (bindingResult.hasErrors()) {
String errorMessage = "";
for (FieldError fieldError : bindingResult.getFieldErrors()) {
errorMessage += fieldError.getField() + " is invalid<br>";
}
model.addAttribute("errorMessage", errorMessage);
return "/forum";
}
forumRepository.save(newForumModel);
return "/forum";
}
@RequestMapping(value = "/list", method = RequestMethod.POST)
public String addList(Principal principal, @Valid @ModelAttribute("newList") ShoppingListDTO newList, BindingResult binding, RedirectAttributes attr, HttpSession session) {
LOGGER.debug("addList() method of MvcController called for user: {}", principal.getName());
if(!binding.hasErrors())
repositoryService.addShoppingListToUserByName(principal.getName(), newList.getListName());
else {
attr.addFlashAttribute("org.springframework.validation.BindingResult.newList", binding);
attr.addFlashAttribute("newList", newList);
for(FieldError ferr:binding.getFieldErrors()) {
LOGGER.info("addList(): field error: " + ferr.getDefaultMessage());
}
}
return "redirect:/list";
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ErrorVM processValidationError(MethodArgumentNotValidException ex) {
BindingResult result = ex.getBindingResult();
List<FieldError> fieldErrors = result.getFieldErrors();
ErrorVM dto = new ErrorVM(ErrorConstants.ERR_VALIDATION);
for (FieldError fieldError : fieldErrors) {
dto.add(fieldError.getObjectName(), fieldError.getField(), fieldError.getCode());
}
return dto;
}
private void assertEntityValidity(BindingResult bindingResult) throws DtoValidationFailedException {
if (bindingResult.hasErrors()) {
throw new DtoValidationFailedException("Validation failed!", bindingResult.getFieldErrors());
}
}