Created
May 2, 2019 23:29
-
-
Save ramiresnas/9d14ec72a00429744475013ab265dd8c to your computer and use it in GitHub Desktop.
SpringBoot Validation
This file contains hidden or 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
@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