I am using spring boot 2.0.6, hibernate validator 6.0, validation-api 2.0, and apache cxf. I used @Valid annotation in controler method and then i set @NotNull, @Email with proper messages in bean properties. Then I created a CustomExceptionHandler to handle the MethodArgumentNotValidException. while testing it by postman i am not getting the proper response with my validation message.
UserController.class
@Path("/user")
@Component
public class UserController {
@POST
@Path("/register")
@Consumes(MediaType.APPLICATION_JSON_VALUE)
@Produces(MediaType.APPLICATION_JSON_VALUE)
public Response registerUser(@Valid User user) {
String status = "";
Boolean isEmailIdExist = UserAuthService.checkUserByMailId(user.getEmail());
Boolean isUserNameExist = UserAuthService.checkUserByUserName(user.getUserName());
if(!isEmailIdExist) {
if(!isUserNameExist) {
status = UserAuthService.registerUser(user);
}else {
status = "Username already taken. Try with different name";
}
}else {
status = "Email ID already exist";
}
return Response.ok(status).build();
}
}
User.class
@Entity
@Table(name = "USER")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "UID")
private int userId;
@NotBlank(message = "Please provide first name")
@Column(name = "FIRST_NAME", length = 50)
private String firstName;
@NotBlank(message = "Please provide email")
@Column(name = "EMAIL", length = 100, unique = true)
@Email(message = "Please provide a valid email")
private String email;}
getter/setter
}
CustomExceptionHandler.java
@ControllerAdvice
@Component
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(Exception.class)
public final ResponseEntity<Object> handleAllExceptions(Exception ex, WebRequest request) {
ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), request.getDescription(false));
return new ResponseEntity<Object>(errorDetails, HttpStatus.INTERNAL_SERVER_ERROR);
}
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
ErrorDetails errorDetails = new ErrorDetails(new Date(), "Validation Failed", ex.getBindingResult().toString());
return new ResponseEntity<Object>(errorDetails, HttpStatus.BAD_REQUEST);
}
}
Json Structure
{
"firstName":"",
"email":"[email protected]",
}