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

发布网友 发布时间:2022-04-25 20:47

我来回答

2个回答

热心网友 时间:2022-06-17 06:48

一、解决
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<ObjectError> 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"%>

<html>
<head>
<title>Reservation Form</title>
<style>
.error {
color: #ff0000;
font-weight: bold;
}
</style>
</head>

<body>
<form:form method="post" modelAttribute="vm">
<form:errors path="*" cssClass="error" />
<table>
<tr>
<td>Name</td>
<td><form:input path="userName" />
</td>
<td><form:errors path="userName" cssClass="error" />
</td>
</tr>
<tr>
<td>email</td>
<td><form:input path="email" />
</td>
<td><form:errors path="email" cssClass="error" />
</td>
</tr>

<tr>
<td colspan="3"><input type="submit" />
</td>
</tr>
</table>
</form:form>
</body>
</html>

热心网友 时间:2022-06-17 06:49

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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com