@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());
	}
}        
main