In a Spring Boot app, I created a custom GlobalExceptionHandler
and add the following method to handle ConstraintViolationException
for invalid file type during upload process:
@ExceptionHandler(ConstraintViolationException.class) @ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY) public ResponseEntity<Object> handleConstraintViolationException( ConstraintViolationException ex, WebRequest request) { log.error("Invalid file type.", ex); return buildErrorResponse(ex, HttpStatus.UNPROCESSABLE_ENTITY, request); }
My buildErrorResponse
works correctly and build proper responses for other handle methods. However, It adds “uploadFile.file:” prefix to my error message.
My questions:
Is there any problem with my
handleConstraintViolationException
implementation? If not, how can I fix that problem?I think there is no need to create custom exception class as shown below for the exceptions that is already defined in
javax.validation
likeConstraintViolationException
. Is that true?
Note: If you need to have a look at my GlobalExceptionHandler
, it is something like on this GitHub.
Advertisement
Answer
Answer For Question 1: Your implementation not wrong but have some missing properties. For best practice to my opinion you can create a class to use it for error response which can contains like statusCode,timestamp,message,description. You can use method like this in your handleConstraintViolationException method:
private ResponseEntity<ErrorMessage>generateErrorMessage(ConstraintViolationException ex, WebRequest request){ ErrorMessage errorMessage = new ErrorMessage.ErrorMessageBuilder() .statusCode(HttpStatus.BAD_REQUEST.value()) .timeStamp(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss").format(LocalDateTime.now())) .message(ex.getMessage()) .description(request.getDescription(false)) .build(); return new ResponseEntity<>(errorMessage, HttpStatus.BAD_REQUEST); }