Skip to content

Instantly share code, notes, and snippets.

@booleguo
Created February 28, 2016 15:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save booleguo/7c1a489492f0b53eb65a to your computer and use it in GitHub Desktop.
Save booleguo/7c1a489492f0b53eb65a to your computer and use it in GitHub Desktop.
@Valid Hibernate validation in a Spring REST controller
@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