SpringMVC学习系列 之 数据验证

 jar导入

maven 依赖:

<!-- spring mvc 数据校验 -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-validator</artifactId>

<version>4.3.1.Final</version>

</dependency>

<dependency>

<groupId>javax.validation</groupId>

<artifactId>validation-api</artifactId>

<version>1.0.0.GA</version>

</dependency>

Controller 

package com.controller;

@Controller
public class MyController {

  @ModelAttribute("user") 

  //@ModelAttribute() 放在方法上,代表该Controller的所有方法在掉用钱,先执行@ModelAttribute方法
  public User1 getUser(User1 uu1){
  System.out.println("我是ModeAttribute.......");  //控制台始终先输出这句话   ,说明此方法先执行!!
  System.out.println(uu1.toString());     //此地方思考一下 为什么uu1打出来的是实时的数据??  数据在请求时,把数据会第一时间绑定到@ModelAttribute("user")后!
  User1 uu = new User1();   //相当于request.setAttribute("user","uu")
  return uu;
}
@RequestMapping("/Get") //@Valid表示开始校验 让@NotEmpty之类的校验起作用
  public String ssss(Model model,@Validated @ModelAttribute("user") User1 user,BindingResult result){

  //此处BindingResult跟@Validated的顺序可不可以交换 是不可以调换位置的!!会报错

  //如果把@ModelAttribute("user") 去掉的话,错误信息,就不会返回给页面输出  注意!!!!

  System.out.println("我是Controller.......");
  System.out.println(user.toString());
  if(result.hasErrors()){
    model.addAttribute("userNameWrror", "");
    System.out.println("errors");
    return "get";
  }else{

    model.addAttribute("user1",new User1("张三","1111"));
    System.out.println("get............");
    return "get";
  }
  }
}

 

springmvc-servlet.xml

开启扫描注解

<mvc:annotation-driven />

 

User1 实体类!

package com.bean;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

public class User1 {
  @NotEmpty(message="用户名不能为空!")
  @Length(min=3,max=6,message="用户名长度不正确!")
  private String username;
  @NotEmpty(message="不能为空!")
  @Email(message="必须符合qq邮箱校验!!!")
  private String email;
  public String getUsername() {
  return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public User1() {
super();

}
public User1(String username, String email) {
super();
this.username = username;
this.email = email;
}
@Override
public String toString() {
return "User1 [username=" + username + ", email=" + email + "]";
}
}

jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<%@taglib uri="http://www.springframework.org/tags/form" prefix="sf"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<sf:form modelAttribute="user">
<sf:errors></sf:errors>
<sf:input path="username"/>
<sf:errors path="username"></sf:errors>
<sf:input path="email"/>
<sf:errors path="email"></sf:errors>
<input type="submit" value="load">
</sf:form>

</body>
</html>

测试 页面:  http://localhost:8080/MavenWeb3/Get/

测试成功!

 

 

附录:

@size和@length的区别:

注解

运行时检查

@AssertFalse

被注解的元素必须为false

@AssertTrue

被注解的元素必须为true

@DecimalMax(value)

被注解的元素必须为一个数字,其值必须小于等于指定的最小值

@DecimalMin(Value)

被注解的元素必须为一个数字,其值必须大于等于指定的最小值

@Digits(integer=, fraction=)

被注解的元素必须为一个数字,其值必须在可接受的范围内

@Future

被注解的元素必须是日期,检查给定的日期是否比现在晚

@Max(value)

被注解的元素必须为一个数字,其值必须小于等于指定的最小值

@Min(value)

被注解的元素必须为一个数字,其值必须大于等于指定的最小值

@NotNull

被注解的元素必须不为null

@Null

被注解的元素必须为null

@Past(java.util.Date/Calendar)

被注解的元素必须过去的日期,检查标注对象中的值表示的日期比当前早

@Pattern(regex=, flag=)

被注解的元素必须符合正则表达式,检查该字符串是否能够在match指定的情况下被regex定义的正则表达式匹配

@Size(min=, max=)

被注解的元素必须在制定的范围(数据类型:String, Collection, Map and arrays)

@Valid

递归的对关联对象进行校验, 如果关联对象是个集合或者数组, 那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验

@CreditCardNumber

对信用卡号进行一个大致的验证

@Email

被注释的元素必须是电子邮箱地址

@Length(min=, max=)

被注解的对象必须是字符串的大小必须在制定的范围内

@NotBlank

被注解的对象必须为字符串,不能为空,检查时会将空格忽略

@NotEmpty

被注释的对象必须为空(数据:String,Collection,Map,arrays)

@Range(min=, max=)

被注释的元素必须在合适的范围内 (数据:BigDecimal, BigInteger, String, byte, short, int, long and 原始类型的包装类 )

@URL(protocol=, host=, port=, regexp=, flags=)

被注解的对象必须是字符串,检查是否是一个有效的URL,如果提供了protocol,host等,则该URL还需满足提供的条件

posted on 2017-10-30 19:28  waao·····  阅读(1104)  评论(0编辑  收藏  举报

导航