Skip to content

Instantly share code, notes, and snippets.

@ramiresnas
Created May 2, 2019 23:29
Show Gist options
  • Save ramiresnas/9d14ec72a00429744475013ab265dd8c to your computer and use it in GitHub Desktop.
Save ramiresnas/9d14ec72a00429744475013ab265dd8c to your computer and use it in GitHub Desktop.
SpringBoot Validation
@Entity
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
private @Getter Integer id;
@NotNull
@Size(min=6, max=50)
@Valid
private @Getter String password;
}
@RepositoryRestResource(path="/customer",
collectionResourceRel="/customer")
public interface CustomerRepository extends PagingAndSortingRepository<Customer, Integer> {
}
@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice(basePackageClasses = { ConstraintViolationException.class, RepositoryRestExceptionHandler.class,
TransactionSystemException.class })
public class CustomRestExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
List<String> errors = new ArrayList<String>();
for (FieldError error : ex.getBindingResult().getFieldErrors()) {
errors.add(error.getField() + ": " + error.getDefaultMessage());
}
for (ObjectError error : ex.getBindingResult().getGlobalErrors()) {
errors.add(error.getObjectName() + ": " + error.getDefaultMessage());
}
ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, ex.getLocalizedMessage(), errors);
return handleExceptionInternal(ex, apiError, headers, apiError.getStatus(), request);
}
@Override
protected ResponseEntity<Object> handleMissingServletRequestParameter(MissingServletRequestParameterException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
String error = ex.getParameterName() + " parameter is missing";
ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, ex.getLocalizedMessage(), error);
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
}
@ExceptionHandler({ ConstraintViolationException.class })
public ResponseEntity<Object> handleConstraintViolation(ConstraintViolationException ex, WebRequest request) {
List<String> errors = new ArrayList<String>();
for (ConstraintViolation<?> violation : ex.getConstraintViolations()) {
errors.add(violation.getRootBeanClass().getName() + " " + violation.getPropertyPath() + ": "
+ violation.getMessage());
}
ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, ex.getLocalizedMessage(), errors);
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
}
@ExceptionHandler({ MethodArgumentTypeMismatchException.class })
public ResponseEntity<Object> handleMethodArgumentTypeMismatch(MethodArgumentTypeMismatchException ex,
WebRequest request) {
String error = ex.getName() + " should be of type " + ex.getRequiredType().getName();
ApiError apiError = new ApiError(HttpStatus.BAD_REQUEST, ex.getLocalizedMessage(), error);
return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment