SpringMVC——数据校验
数据校验在web应用里是非常重要的功能,尤其是在表单输入中。在这里采用Hibernate-Validator进行校验,该方法实现了JSR-303验证框架支持注解风格的验证。
一、导入jar包
若要实现数据校验功能,需要导入必要的jar包,主要包括以下几个:
- classmate-1.3.1.jar
- hibernate-validator-5.4.1.Final.jar
- hibernate-validator-annotation-processor-5.4.1.Final.jar
- hibernate-validator-cdi-5.4.1.Final.jar
- jboss-logging-3.3.0.Final.jar
- validation-api-1.1.0.Final.jar
二、常用的校验注解
注解 | 功能 |
---|---|
@Null | 验证对象是否为 null |
@NotNull | 验证对象是否不为 null |
@AssertTrue | 验证 Boolean 对象是否为 true |
@AssertTrue | 验证 Boolean 对象是否为 false |
@Max(value) | 验证 Number 和 String 对象是否小于等于指定值 |
@Min(value) | 验证 Number 和 String 对象是否大于等于指定值 |
@DecimalMax(value) | 验证注解的元素值小于等于 @DecimalMax 指定的 value 值 |
@DecimalMin(value) | 验证注解的元素值大于等于 @DecimalMin 指定的 value 值 |
@Digits(integer,fraction) | 验证字符串是否符合指定格式的数字,integer 指定整数精度,fraction 指定小数精度 |
@Size(min,max) | 验证对象长度是否在给定的范围内 |
@Past | 验证 Date 和 Calendar 对象是否在当前时间之前 |
@Future | 验证 Date 和 Calendar 对象是否在当前时间之后 |
@Pattern | 验证 String 对象是否符合正则表达式的规则 |
@NotBlank | 检查字符串是不是 Null,被 Trim 的长度是否大于0,只对字符串,且会去掉前后空格 |
@URL | 验证是否是合法的 url |
验证是否是合法的邮箱 | |
@CreditCardNumber | 验证是否是合法的信用卡号 |
@Length(min,max) | 验证字符串的长度必须在指定范围内 |
@NotEmpty | 检查元素是否为 Null 或 Empty |
@Range(min,max,message) | 验证属性值必须在合适的范围内 |
三、修改实体类
在类的属性上进行标注,如:
public class User {
@NotBlank(message = "Username can not be empty")
private String username;
@NotBlank(message = "password can not be blank")
@Length(min = 6, max = 16, message = "The length of the password must be between 6 and 16 bits")
private String password;
@Range(min = 18, max = 60, message = "Age must be between 18 and 60 years old")
private Integer age;
@Pattern(regexp = "^1[3|4|5|7|8][0-9]{9}$", message = "Please enter the correct format of the phone number")
private String phone;
@Email(message = "Please enter a valid email address")
private String email; // other...
}
四、修改相应的处理方法
@RequestMapping(value = "/register")
public String register(@Valid @ModelAttribute("user") User user, Errors errors,Model model) {
if(errors.hasErrors()){
return "register";
}
model.addAttribute("user", user);
return "success";
}
五、视图输出
校验之后,我们通常需要在表单的输入框后进行文字反馈:
<form:form modelAttribute="user" method="post" action="register">
<fieldset>
<legend>register</legend>
<p>
<label>name:</label>
<form:input path="username" />
<form:errors path="username" cssStyle="color:red"/>
</p>
...
</fieldset>
</form:form>
然而,有些时候并不推荐直接将错误信息写在注解的message属性里,这样不方便国际化。因此可以做以下几处修改:
1. 新建validatemessages.properties
username.not.blank = "username cannot be empty..."
password.not.blank = "password cannot be empty"
password.not.length = "password should be in 6-10"
age.not.range = "age should be in 10-70"
phone.not.pattern = "phone should be in format"
email.not.format = "email should be in format"
2. 实体类中的注解使用相对引用
public class User { @NotBlank(message = "{username.not.blank}")
private String username; @NotBlank(message = "{password.not.blank}")
@Length(min = 6, max = 10, message = "{password.not.length}")
private String password; @Range(min = 10, max = 70, message = "{age.not.range}")
private Integer age; @Pattern(regexp = "^1[3|4|5|7|8][0-9]{9}$", message = "{phone.not.pattern}")
private String phone; @Email(message = "{email.not.format}")
private String email;
// other...
}
3. 修改配置文件
<!-- 默认的注解映射的支持 -->
<mvc:annotation-driven validator="validator" conversion-service="conversion-service" /> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<!--不设置则默认为classpath下的 ValidationMessages.properties -->
<property name="validationMessageSource" ref="validatemessageSource"/>
</bean>
<bean id="conversion-service" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
<bean id="validatemessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:validatemessages"/>
<property name="fileEncodings" value="utf-8"/>
<property name="cacheSeconds" value="120"/>
</bean>
特别注意:value="classpath:validatemessages",文件名不加后缀!
至此,数据校验的整个过程就结束了。
最后还要特别强调的重点是:
- 视图中<form:form modelAttribute="contentModel" method="post">的modelAttribute="xxx"后面的名称xxx必须与对应的@Valid @ModelAttribute("xxx") 中的xxx名称一致,否则模型数据和错误信息都绑定不到。
- <form:errors path="name"></form:errors>即会显示模型对应属性的错误信息,当path="*"时则显示模型全部属性的错误信息。
参考地址:
http://www.cnblogs.com/liukemng/p/3738055.html
SpringMVC——数据校验的更多相关文章
- SpringMVC数据校验并通过国际化显示错误信息
目录 SpringMVC数据校验并通过国际化显示错误信息 SpringMVC数据校验 在页面中显示错误信息 通过国际化显示错误信息 SpringMVC数据校验并通过国际化显示错误信息 SpringMV ...
- 《Java从入门到放弃》入门篇:springMVC数据校验
昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303 ...
- 《SpringMVC从入门到放肆》十三、SpringMVC数据校验
上一章,我们学习了SpringMVC的自定义类型转换器,但是如果转换后的数据传递到Controller的方法中,忽然发现有某些属性为Null了,这怎么办?我们需要一种有效的数据校验机制,来对数据进行有 ...
- springMVC数据校验与单文件上传
spring表单标签: <fr:from/> 渲染表单元素 <fr:input/>输入框组件 <fr:password/>密码框组件标签 & ...
- SpringMVC 数据校验(JSR-303)
项目中,通常使用较多的是前端的校验,比如页面中js校验以及form表单使用bootstrap校验.然而对于安全要求较高点建议在服务端进行校验. 服务端校验: 控制层controller:校验页面请求的 ...
- Springmvc数据校验
步骤一:导入四个jar包 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- SpringMvc数据校验@Valid等注解的使用与工具类抽取
最近在重构老项目的代码,发现校验入参占用了很多代码,之前我对这一块的认识局限于使用StringUtils等工具来多个if块进行判断,代码是没什么问题,但是总写这些令人生烦,毕竟写代码也要讲究优雅的嘛, ...
- SpringMVC 数据校验
1.引入jar包 2.配置验证器 <!-- 配置验证器 --> <bean id="myvalidator" class="org.springfram ...
- SpringMVC的拦截器和数据校验
SpringMVC拦截器 什么是拦截器:Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以 ...
随机推荐
- 程序员带你一步步分析AI如何玩Flappy Bird
以下内容来源于一次部门内部的分享,主要针对AI初学者,介绍包括CNN.Deep Q Network以及TensorFlow平台等内容.由于笔者并非深度学习算法研究者,因此以下更多从应用的角度对整个系统 ...
- 《Python自然语言处理》第二章 学习笔记
import nltk from nltk.book import * nltk.corpus.gutenberg.fileids() emma = nltk.corpus.gutenberg.wor ...
- MySQL之数据类型(常用)
MySQL-data_type数据类型 1.查看数据类型 mysql> help data type //通过help对数据进行查看,以及使用的方法 2.MySQL常见的数据类型 整数in ...
- 使用vs2015搭建Asp.net Core
准备工具 1.首先得安装vs2015 并且升级至 update3及以上 2.安装.net core sdk.附上官网下载地址 http://www.microsoft.com/net/down ...
- ArrayList和List主要区别 就是ArrayList类型不安全。
什么是不安全? 1:List大家都知道初始化的时候需要定义其类型,例如 List<int> listTest = new List<int>():而ArrayList,例如:A ...
- Elasticsearch实现类似 like '?%' 搜索
在做搜索的时候,下拉联想词的搜索肯定是最常见的一个场景,用户在输入的时候,要自动补全词干,说得简单点,就是以...开头搜索,如果是数据库,一句SQL就很容易实现,但在elasticsearch如何实现 ...
- 简单的后台数据和前台数据交互.net
最近忙着做POS项目,心血来来潮写了点小项目. 更具要求是随机显示数据并且产生的数据是可以控制的.前台交互显示能够倒叙,切每次只显示一条,页面不能超过20条超过的部分做删除. 我先展示一下前台的代码, ...
- 五十行javascript代码实现简单的双向数据绑定
五十行javascript代码实现简单的双向数据绑定 Vue框架想必从事前端开发的同学都使用过,它的双向数据绑定机制能给我们带来很大的方便.今天闲着没事,尝试着实现一下双向数据绑定,接下来给大家分享一 ...
- 蓝桥杯-马虎的算式-java
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...
- Spring框架 jar包下载
Spring框架下载 打开网址https://repo.spring.io 点击左侧边栏第二个按钮 点击 在输入框输入spring-framework点击Search 找到你需要的版本下载就好 教程到 ...