Created
February 28, 2016 15:50
-
-
Save booleguo/7c1a489492f0b53eb65a to your computer and use it in GitHub Desktop.
@Valid Hibernate validation in a Spring REST controller
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@ControllerAdvice | |
public class AdminExceptionHandler { | |
@ExceptionHandler(AdminNotFoundException.class) | |
@ResponseBody | |
public ResponseEntity<ErrorInfo> adminNotFoundException(HttpServletRequest request, AdminNotFoundException e) { | |
String url = request.getRequestURL().toString(); | |
String errorMessage = localizeErrorMessage("error.admin.not.found", new Object[] { e.getAdminId() }); | |
return new ResponseEntity<ErrorInfo>(new ErrorInfo(url, errorMessage), HttpStatus.NOT_FOUND); | |
} | |
@ExceptionHandler(MethodArgumentNotValidException.class) | |
@ResponseBody | |
public ResponseEntity<ErrorFormInfo> methodArgumentNotValidException(HttpServletRequest request, MethodArgumentNotValidException e) { | |
String url = request.getRequestURL().toString(); | |
String errorMessage = localizeErrorMessage("error.admin.invalid.form.argument"); | |
ErrorFormInfo errorFormInfo = new ErrorFormInfo(url, errorMessage); | |
BindingResult result = e.getBindingResult(); | |
List<FieldError> fieldErrors = result.getFieldErrors(); | |
errorFormInfo.getFieldErrors().addAll(populateFieldErrors(fieldErrors)); | |
return new ResponseEntity<ErrorFormInfo>(errorFormInfo, HttpStatus.BAD_REQUEST); | |
} | |
public List<ErrorFormField> populateFieldErrors(List<FieldError> fieldErrorList) { | |
List<ErrorFormField> errorFormFields = new ArrayList<ErrorFormField>(); | |
StringBuilder errorMessage = new StringBuilder(""); | |
for (FieldError fieldError : fieldErrorList) { | |
errorMessage.append(fieldError.getCode()).append("."); | |
errorMessage.append(fieldError.getObjectName()).append("."); | |
errorMessage.append(fieldError.getField()); | |
errorFormFields.add(new ErrorFormField(fieldError.getField(), localizeErrorMessage(errorMessage.toString()))); | |
errorMessage.delete(0, errorMessage.capacity()); | |
} | |
return errorFormFields; | |
} | |
private String localizeErrorMessage(String errorCode) { | |
return localizeErrorMessage(errorCode, null); | |
} | |
private String localizeErrorMessage(String errorCode, Object args[]) { | |
Locale locale = LocaleContextHolder.getLocale(); | |
String errorMessage = messageSource.getMessage(errorCode, args, locale); | |
return errorMessage; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment