springMVC @valid 注解没有效果是怎么回事?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springMVC @valid 注解没有效果是怎么回事?相关的知识,希望对你有一定的参考价值。
一、解决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> 参考技术A @Valid 只能用来验证 @RequestBody 标注的参数
SpringMVC 数据校验。(后台校验 hibernate validate).
1. 数据校验。(后台校验 hibernate validate).
- 引入jar包。
- 在相应的实体类中加入注解。
-
1 package com.zhiyou100.wc.bean; 2 3 import javax.validation.constraints.Pattern; 4 5 import org.hibernate.validator.constraints.Length; 6 import org.hibernate.validator.constraints.NotEmpty; 7 8 public class Users 9 @NotEmpty(message="用户名不能为空") 10 private String uname; 11 @Length(min=6,max=12,message="密码长度在【6~12】之间") 12 private String password; 13 @Pattern(regexp="^((13[0-9])|(14[579])|(15([0-3,5-9]))|(16[6])|(17[0135678])|(18[0-9]|19[89]))\\\\d8$",message="手机格式不准确") 14 private String phone; 15 16 public Users() 17 super(); 18 19 20 public String getUname() 21 return uname; 22 23 24 public void setUname(String uname) 25 this.uname = uname; 26 27 28 public String getPassword() 29 return password; 30 31 32 public void setPassword(String password) 33 this.password = password; 34 35 36 public String getPhone() 37 return phone; 38 39 40 @Override 41 public String toString() 42 return "Users [uname=" + uname + ", password=" + password + ", phone=" + phone + "]"; 43 44 45 public void setPhone(String phone) 46 this.phone = phone; 47 48 49 50
-
- 在控制层接受参数时。
1 package com.zhiyou100.wc.controllter; 2 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 7 import javax.validation.Valid; 8 9 import org.springframework.stereotype.Controller; 10 import org.springframework.ui.Model; 11 import org.springframework.validation.BindingResult; 12 import org.springframework.validation.FieldError; 13 import org.springframework.web.bind.annotation.RequestMapping; 14 import org.springframework.web.bind.annotation.SessionAttributes; 15 16 import com.zhiyou100.wc.bean.Users; 17 18 @Controller 19 @RequestMapping("user") 20 @SessionAttributes(names= "name","address")//键名叫:name保存的作用域为session 21 public class UsersControllter 22 23 24 @RequestMapping("register") 25 public String register(@Valid Users users,BindingResult br,Model model) 26 if(br.hasErrors()) 27 List<FieldError> fieldErrors= br.getFieldErrors(); 28 Map<String,Object> errorMsg=new HashMap<>(); 29 for(FieldError f:fieldErrors) 30 errorMsg.put(f.getField(), f.getDefaultMessage()); 31 32 model.addAttribute("errorMsg", errorMsg); 33 return "forward:../register.jsp"; 34 35 36 return "list"; 37 38 39 40
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="UTF-8"> 7 <title>注册</title> 8 </head> 9 <body> 10 <!-- <a href="user/register.do?name=zs">链接到List.do</a> --> 11 12 <form action="/Springmvc-0904/user/register" method="post"> 13 姓名:<input type="text" name="uname"/>$errorMsg.uname <br> 14 密码:<input type="text" name="password"/>$errorMsg.password <br> 15 手机:<input type="text" name="phone"/>$errorMsg.phone <br> 16 <input type="submit" value="提交"/> 17 </form> 18 19 </body> 20 </html>
以上是关于springMVC @valid 注解没有效果是怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章
SpringMVC验证框架Validation自定义注解实现传递参数到国际化资源文件
SpringMVC中实现Bean Validation(JSR 303 JSR 349 JSR 380)
springMVC——数据校验(后台校验 hibernate validate).
SpringMVC 数据校验。(后台校验 hibernate validate).