springMVC @valid 注解没有效果是怎么回事?

2024年11月28日 14:44
有2个网友回答
网友(1):

一、解决
1)login方法接收的参数user是用@Valid进行标注,@Valid是定义在JSR-303标准中的,否则Spring不会进行校验。
2)处理器方法必须给定包含Errors的参数,这可以是Errors本身,也可以是它的子类BindingResult,使用了Errors参数就是告诉Spring关于表单对象数据校验的错误处理,否则Spring会直接抛出异常,而且这个参数是必须紧挨着@Valid参数。

二、使用注解
1、准备校验时使用的JAR
validation-api-1.0.0.GA.jar:JDK的接口;
hibernate-validator-4.2.0.Final.jar是对上述接口的实现;
log4j、slf4j、slf4j-log4j

2、编写需要校验的bean
@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;

3、校验方法

@RequestMapping("/login")
public String testValid(@Valid User user, BindingResult result){
if (result.hasErrors()){
List errorList = result.getAllErrors();
for(ObjectError error : errorList){
System.out.println(error.getDefaultMessage());
}
}

return "test";
}

4、使用spring的标签库自定义处理
spring标签库的用法:

<%@ taglib prefix="form" uri="springframework.org/tags/form"%>



Reservation Form





















Name

email





网友(2):

@Valid 只能用来验证 @RequestBody 标注的参数