SpringMvc中的数据校验
SpringMvc中的数据校验
Hibernate校验框架中提供了很多注解的校验,如下:
| 注解 | 运行时检查 | 
|---|---|
| @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 | 对信用卡号进行一个大致的验证 | 
| 被注释的元素必须是电子邮箱地址 | |
| @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还需满足提供的条件 | 
下面我们来看一下例子:

我们需要对成绩进行非空验证,以及最小值为0,最大值为100的数据校验;其次是对姓名进行非空验证,以及对姓名的字符进行验证;然后是对电话进行非空验证以及正则表达式的数据校验,提示信息等等.....
第一步:springmvc中我们使用hibernate的校验框架validation(注:和hibernate没有任何关系),使用这个校验框架的话,需要导入jar包,如下: 
第二步:创建配置文件进行配置验证器和包扫描器,以及web.xml文件配置
    <!-- 配置包扫描器-->
       <context:component-scan base-package="cn.happy.controller"></context:component-scan>
       <!-- 配置验证器 -->
       <bean id="myvalidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
           <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
       </bean> 
       <mvc:annotation-driven validator="myvalidator"/>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>
  <!-- 编码过滤器 -->
  <filter>
    <filter-name>CharacterEncoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!-- 配置中央调度器 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </init-param>
    <!-- TOmcat启动的时候,Servlet对象就存储到内存 正整数 -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
第三步:创建UserInfo实体,并且标注注解等
public class UserInfo {
    //成绩
    @NotNull    //不能为空
    @Min(value=0,message="成绩最小值为{value}")    //最小值
    @Max(value=100,message="成绩最大值为{value}")    //最大值
    private Integer score;
    //姓名
    @NotNull
    @Size(min=6,message="名称至少6个字符")    //字符
    private String name;
    //成绩
    @NotNull
    @Pattern(regexp="^1[3,4,5,6,7,8,9]\\d{9}$",message="手机号码格式不正确")
    private String phone;
    public Integer getScore() {
        return score;
    }
    public void setScore(Integer score) {
        this.score = score;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
}
第四步:创建contorller控制器
@Controller
public class MyController {
    @RequestMapping("/first.do")
    public ModelAndView firstDo(@Valid UserInfo info,BindingResult br)
    {
        ModelAndView mv=new ModelAndView();
        mv.setViewName("/welcome.jsp");
        int count = br.getErrorCount();
        if(count>0)
        {
            FieldError score = br.getFieldError("score");
            FieldError name = br.getFieldError("name");
            FieldError phone = br.getFieldError("phone");
            if(score!=null)
            {
                mv.addObject("scoremsg",score.getDefaultMessage());
            }
            if(name!=null)
            {
                mv.addObject("namemsg",name.getDefaultMessage());
            }
            if(phone!=null)
            {
                mv.addObject("phonemsg",phone.getDefaultMessage());
            }
            mv.setViewName("/index.jsp");
        }
        return mv;
    }
}
如果数据校验通过的话,那么跳转到welcome.jsp页面,失败则跳到index.jsp页面
 <h1>数据校验</h1>
    <form action="${pageContext.request.contextPath }/first.do" method="post">
                 成绩:<input name="score" /> <span>${scoremsg }</span><br/><br/>
                 姓名:<input name="name"/><span>${namemsg }</span><br/><br/>
                 电话:<input name="phone"/><span>${phonemsg }</span><br/><br/>
       <input type="submit" value="提交"/>
    </form>
<h1>WELCOME</h1>
效果如下:


SpringMvc中的数据校验的更多相关文章
- 【SpringMVC学习06】SpringMVC中的数据校验
		
这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller, ...
 - Spring官网阅读(十七)Spring中的数据校验
		
文章目录 Java中的数据校验 Bean Validation(JSR 380) 使用示例 Spring对Bean Validation的支持 Spring中的Validator 接口定义 UML类图 ...
 - struts中的数据校验
		
1.struts中如何进行数据校验 在每一个Action类中,数据校验一般都写在业务方法中,比如login().register()等.struts提供了数据校验功能.每个继承自ActionSuppo ...
 - Struts2中validate数据校验的两种常用方法
		
本文主要介绍Struts2中validate数据校验的两种方法及Struts2常用校验器. 1.Action中的validate()方法 Struts2提供了一个Validateable接口,这个接 ...
 - springMVC使用JSR303数据校验
		
JSR303注解 hibernate validate是jsr 303的一个参考实现,除支持所有的标准校验注解外,他还支持扩展注解 spring4.0拥有自己独立的数据校验框架,同时支持jsr 303 ...
 - [WPF 基础知识系列] —— 绑定中的数据校验Vaildation
		
前言: 只要是有表单存在,那么就有可能有对数据的校验需求.如:判断是否为整数.判断电子邮件格式等等. WPF采用一种全新的方式 - Binding,来实现前台显示与后台数据进行交互,当然数据校验方式也 ...
 - 【Spring】SpringMVC中浅析数据的传递方式
		
包括了基本数据类型的传递和 Date数据类型的传递.关于SpringMVC的配置可以参见基于注解实现SpringMVC+MySQL 假设有表单页面如下: <h1>登录</h1> ...
 - SilverlightMVVM模式中的数据校验
		
silverlight的数据校验大体分成3种类型: 数据是非必填的但是需要满足相应数据格式的 数据是必填的且可能需要进行数据格式校验的 其他(如数据的联动校验) 以下的数据校验方式针对第二种: 在相应 ...
 - SpringBoot中BeanValidation数据校验与优雅处理详解
		
目录 本篇要点 后端参数校验的必要性 不使用Validator的参数处理逻辑 Validator框架提供的便利 SpringBoot自动配置ValidationAutoConfiguration Va ...
 
随机推荐
- 【.net 深呼吸】细说CodeDom(2):表达式、语句
			
在上一篇文章中,老周厚着脸皮给大伙介绍了代码文档的基本结构,以及一些代码对象与CodeDom类型的对应关系. 在评论中老周看到有朋友提到了 Emit,那老周就顺便提一下.严格上说,Emit并不是针对代 ...
 - StringMVC 中如何做数据校验
			
步骤一:引入四个jar包 步骤二:注册类型转换器 <context:component-scan base-package="cn.happy.controller"> ...
 - JAVA回调机制(CallBack)详解
			
序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...
 - nodejs进阶(1)—输出hello world
			
下面将带领大家一步步学习nodejs,知道怎么使用nodejs搭建服务器,响应get/post请求,连接数据库等. 搭建服务器页面输出hello world var http = require ...
 - Android权限管理之RxPermission解决Android 6.0 适配问题
			
前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...
 - 理解 .NET Platform Standard
			
相关博文:ASP.NET 5 Target framework dnx451 and dnxcore50 .NET Platform Standard:https://github.com/dotne ...
 - Oracle 数据库语句大全
			
Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...
 - JDK安装与配置
			
JDK安装与配置 一.下载 JDK是ORACLE提供免费下载使用的,官网地址:https://www.oracle.com/index.html 一般选择Java SE版本即可,企业版的选择Java ...
 - No plugin found for prefix ‘jetty’ in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories
			
maven配置文件(最大的那个)的<pluginGroups></pluginGroups>增加一行如下<pluginGroups><pluginGroup& ...
 - Cowboy 开源 WebSocket 网络库
			
Cowboy.WebSockets 是一个托管在 GitHub 上的基于 .NET/C# 实现的开源 WebSocket 网络库,其完整的实现了 RFC 6455 (The WebSocket Pro ...