当前位置: 首页 > news >正文

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还需满足提供的条件

转载于:https://www.cnblogs.com/yaozz/p/7756102.html

相关文章:

  • easyui-combobox 设置option内容不换行
  • 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录
  • fs检测文件夹状态
  • webapi 获取请求参数
  • 风险管理:企业要为云端的5种风险承担责任
  • 分享关于Entity Framework 进行CRUD操作实验的结果
  • 文件地理数据库的大小和名称限制
  • OID
  • Hyper-V Server 2012 R2介绍
  • 单例模式--SingleTon
  • BZOJ-1853: [Scoi2010]幸运数字 (容斥原理)
  • ORA-01950: no privileges on tablespace
  • 计算机硬件组成
  • C[a,b]向量空间中的函数的线性相关性
  • UDP中转服务器
  • AngularJS指令开发(1)——参数详解
  • css属性的继承、初识值、计算值、当前值、应用值
  • gops —— Go 程序诊断分析工具
  • JavaScript服务器推送技术之 WebSocket
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Mac转Windows的拯救指南
  • Terraform入门 - 3. 变更基础设施
  • zookeeper系列(七)实战分布式命名服务
  • 初识MongoDB分片
  • 反思总结然后整装待发
  • 关于Java中分层中遇到的一些问题
  • 如何学习JavaEE,项目又该如何做?
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 思维导图—你不知道的JavaScript中卷
  • 鱼骨图 - 如何绘制?
  • 怎么将电脑中的声音录制成WAV格式
  • No resource identifier found for attribute,RxJava之zip操作符
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #stm32驱动外设模块总结w5500模块
  • (1)(1.9) MSP (version 4.2)
  • (2)(2.10) LTM telemetry
  • (2020)Java后端开发----(面试题和笔试题)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (ibm)Java 语言的 XPath API
  • (八)Spring源码解析:Spring MVC
  • (编译到47%失败)to be deleted
  • (分布式缓存)Redis分片集群
  • (十六)一篇文章学会Java的常用API
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net core 6 集成和使用 mongodb
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • [ Linux 长征路第二篇] 基本指令head,tail,date,cal,find,grep,zip,tar,bc,unname
  • [Android]使用Git将项目提交到GitHub
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子