【发布时间】:2018-11-22 09:55:56
【问题描述】:
我正在使用 spring boot 2.0.6、hibernate 验证器 6.0、validation-api 2.0 和 apache cxf。我在控制器方法中使用了@Valid 注释,然后我在 bean 属性中设置了 @NotNull、@Email 和正确的消息。然后我创建了一个 CustomExceptionHandler 来处理 MethodArgumentNotValidException。在邮递员对其进行测试时,我的验证消息没有得到正确的响应。
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 结构
{
"firstName":"",
"email":"prakashkumar@xyz.com",
}
【问题讨论】:
-
你能提供你所期望的和你得到的吗?
-
嗨@PoojaAggarwal。你可以看到我的 json 结构。我在邮递员中发送这个 json,我应该得到一个带有验证消息“请提供名字”的响应,但我得到了完整的异常堆栈跟踪。
-
你能评论一下这个方法handleMethodArgumentNotValid并尝试一下吗。
-
我又遇到了同样的异常。在 Eclipse 控制台中,我可以看到验证消息。
-
约束违规列表:[ ConstraintViolationImpl{interpolatedMessage='请提供名字', propertyPath=firstName, rootBeanClass=class com.airbus.argo.model.ArgoUser, messageTemplate='请提供名字' } ]]
标签: java spring-boot cxf hibernate-validator