I have an exception handler class that is working fine for validation failures.
The method handleMethodArgumentNotValid is not getting called for date type format mismatch (dateOfBirth) but works fine with @Past failure.
Here is my code:
package com.example.demo.exception.handler;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import com.example.demo.exception.ExceptionResponse;
import com.example.demo.exception.BadRequestException;
@ControllerAdvice
@RestController
public class ResponseExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request) {
ExceptionResponse response = new ExceptionResponse(ex.getBindingResult().toString(), request.getDescription(false));
return new ResponseEntity(response, HttpStatus.BAD_REQUEST);
}
@ExceptionHandler
public final ResponseEntity<Object> handleAllExceptions(
Exception ex,
WebRequest request){
ExceptionResponse response = new ExceptionResponse(ex.getMessage(), request.getDescription(false));
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response);
}
}
Here is my model class:
package com.example.demo.model;
import lombok.Data;
import java.util.Date;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.springframework.format.annotation.DateTimeFormat;
@Data
public class User {
@Email(message = "Email is not valid", regexp = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])")
@JsonProperty("email")
private String email;
@Size(min = 2, message = "First name should be at least 2 characters long")
@NotNull
@JsonProperty("first_name")
private String firstName;
@JsonProperty("last_name")
private String lastName;
@JsonProperty("user_uuid")
private String userUUID;
@NotNull(message = "Password is required")
@JsonProperty("password")
private String password;
@DateTimeFormat(pattern = "yyyy-mm-dd")
@JsonFormat(pattern = "mm/dd/yyyy")
@JsonProperty("date_of_birth")
@Past
private Date dateOfBirth;
}
What should I do for date format mismatch exception? Also, how to provide custom message for it?