导入Hibernate validator的Jar包

hibernate-validator-4.3.0.Final.jar

jboss-logging-3.1.0.CR2.jar

validation-api-1.0.0.GA.jar

定义实体类:

public class Student {

private String name;
    private double score;
    private String mobile;
        
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", score=" + score + ", mobile="
                + mobile + "]";
    }

}

定义index.jsp页面  

<body>
   Index.jsp <br>
   <form action="test/some.do" method="post">
           姓名:<input name="name"  /> ${nameMsg }<br>
           成绩:<input name="score"  /> ${scoreMsg }<br>
           手机号:<input name="mobile" />${mobileMsg }<br>
           <input type="submit" value="提交请求">
   </form>
  </body>

定义Controller

import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class MyController {

@RequestMapping("/test/some.do")
    //@Validated 表名Student是使用了Bean验证
    //BindingResult是异常信息
    public ModelAndView doSome(@Validated Student student , BindingResult br) {
        
        ModelAndView mv = new ModelAndView();
        //默认的成功页面
        mv.setViewName("/show.jsp");

//异常的判读处理
        List<ObjectError> errors = br.getAllErrors();
        //size() > 0 表名有异常
        if(errors.size() > 0 ){
            //获取指定属性的异常
            FieldError nameError = br.getFieldError("name");
            FieldError scoreError = br.getFieldError("score");
            FieldError mobileError = br.getFieldError("mobile");
            
            // name属性验证失败了,产生了error
            if( nameError != null){
                mv.addObject("nameMsg", nameError.getDefaultMessage());
            }
            
            if( scoreError != null){
                mv.addObject("scoreMsg", scoreError.getDefaultMessage());
            }
            
            if( mobileError != null){
                mv.addObject("mobileMsg", mobileError.getDefaultMessage());
            }
            mv.setViewName("/index.jsp");
        }
        return mv;
    }
}

/**

只要发生数据验证失败,则需要将页面重新跳转到index.jsp表单页面,让用户重写输入

BindingResult 接口中常用的方法

getAllErrors() :获取到所有的异常信息,其返回值为List ,但若没有发生异常,则该List也被创建,只不过其size()为0,而非List为Null

getFieldError() : 获取指定属性的异常信息

getErrorCount() : 获取所有异常的数量

getRawFieldValue() : 获取到用户输入引发验证异常的原始值.

*/

定义show.jsp页面

<html>
    <head>    
    </head>  
    <body>
       show.jsp <br>
    </body>
</html>

定义SpringMVC配置文件

<!-- 注册包扫描器 -->
  <context:component-scan base-package="com.zx.*" />
  <!-- 注册验证器 -->
  <bean id="myValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <!-- 指定使用的验证框架, 验证器的提供者 -->
        <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
  </bean>
 
  <!-- 把验证器给注解驱动 -->
  <mvc:annotation-driven validator="myValidator" />

在实体属性上添加验证注解:

  使用的验证器注解均为:javax.validation.constraints包中的类.在注解的message属性中,可以使用{属性名}的方式来引用指定的注解的属性值

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;

public class Student {
    //验证的注解放在属性上,指定验证的规则
    @NotEmpty(message="姓名不能为空")
    @Size(min=3,max=6,message="姓名长度是{min}到{max}")
    private String name;
    @Min(value=0,message="成绩不能小于0")
    @Max(value=100,message="成绩不能大于100")
    private double score;
    @NotEmpty(message="手机号不能为空")
    @Pattern(regexp="^1[34578]\\d{9}$",message="手机号格式不正确")
    private String mobile;
        
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", score=" + score + ", mobile="
                + mobile + "]";
    }

}

Hibernate Validator中常用的验证注解介绍:

1.@AssertFalse  : 验证注解的元素值时false

2.@AssertTrue : 验证注解的元素值时true

3.@DecimalMax(value=x) : 验证注解的元素值小于等于指定的十进制value值

4.DecimalMin(value=x) : 验证注解的元素值大于等于指定的十进制value值

5.@Degits(integer=整数位数,fraction=小数位数) : 验证注解的元素值的整数位树和小数位数上线

6.@Futrue : 验证注解的元素值(日期类型) 比当前时间晚

7.@Max(value=x) : 验证注解的元素值小于等于指定的value值

8.@Min(value=x) 验证注解的元素值大于等于指定的value值

9.@NotNull : 验证注解的元素值不是null

10.@Null : 验证注解的元素值是null

11.@Past : 验证注解的元素值(日期类型)比当前时间早

12.@Pattern(regex=正则表达式)  : 验证注解的元素值与指定的正则表达式匹配

13.@Size(min=最小值,max=最大值) : 验证注解的元素值在min和max(包含)指定区间,如字符长度,集合大小

14.@Valid : 验证关联的对象 ,如账户对象里有一个订单对象,指定验证订单对象

15.@NotEmpty : 验证注解的元素值不为null且不为空(字符长度不为0,集合大小不为0)

16.@Renge(min=最小值,max=最大值) 验证注解的元素值在最小值和最大值之间

17.@NotBlank : 验证注解的元素不为空(不为null,去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格

18.@Length(min=下限,max=上线) 验证注解的元素值长度在min和max区间内

19.@Email : 验证注解的元素值时Emali,也可以通过正则表达式和flag指定自定义的email格式

注意:

  @NotNull,  @NotEmpty 和@NotBlank的区别

    @NotNull           任何对象的value不能为null

    @NotEmpty       集合对象的元素不为0,即集合不为空,也可以用于字符串不为null

    @NotBlank        只能用于字符串不为null,并且字符串trim()以后length要大于0

转载于:https://www.cnblogs.com/zwjcom/p/11365522.html

Springmvc的服务端数据验证-----Hibernate Validator相关推荐

  1. 如何设计云存储服务端数据存储加密机制

    云存储是一种新型的网络存储形式.随着云存储的广泛使用,云存储中的数据安全问题,如数据泄漏.数据篡改,如何设计云存储服务端数据存储加密机制也成了用户广泛关注的问题.云存储可以分为访问层.应用接口层.基础 ...

  2. 浏览器及时感知服务端数据变化的方式

    需求 在公司,有一个需求,是浏览器实时获取服务端数据变化,然后根据变化做相应的动作.需求场景如下:手机端扫描二维码,然后获取待取件订单列表,点击取件,进行取件,同时远端打印机打印出取件小票. 技术难点 ...

  3. bootstraptable 加载完成_bootstrap table onLoadSuccess加载服务端数据成功事件

    bootstrap table onLoadSuccess加载服务端数据成功事件 bootstrap table onLoadSuccess加载服务端数据成功的事件,该事件的作用是什么呢?服务端返回自 ...

  4. [react] 怎样使用Hooks获取服务端数据?

    [react] 怎样使用Hooks获取服务端数据? import React, { useState, useEffect } from 'react'; import axios from 'axi ...

  5. Vue与服务端数据交互 [ axios ]

    Vue生命周期 每个Vue实例在被创建到销毁要经过一系列的过程,这整个过程称为Vue实例的生命周期 Vue在生命周期不同的阶段点会自动运行一些函数, 这些函数称为Vue生命周期的钩子(hook)函数 ...

  6. 服务器怎么查服务端数据

    通常情况下,在做性能测试的时候,我们需要关注的点有这些: 服务端处理能力(并发量.qps.响应时间等): 服务端机器性能数据(程序内存占用.cpu占用.网络带宽占用等): 异常请求信息(如服务端返回5 ...

  7. 【工作记录】网易云信最近联系人中加入本地服务端数据

    网易云信最近联系人中加入本地服务端数据 1.实现效果如下(语音聊天中) 2.实现思路: 特定情况下: 1.获取聊天列表(最近联系人中id) 2.根据id,请求所有人的情况 3.刷新列表 3.具体实现: ...

  8. t3畅捷通显示不能登陆服务器,用友T3提示不能登录到服务器:解析服务端数据出现错误,可能服务端是8.13的先前版本?...

    文章摘要:问题现象:第1种情况:登录的时候就直接提示:不能登录到服务器:pc-pcfailed:解析服务端数据出现错误,可能服务端是8.13的先前版本,第二种情况:登录用友T3软件后,点击模块提示:检 ...

  9. 用友 无法正确解析服务器,不能登录到服务器,解析服务端数据出现错误,可能服务端是8.13的先前版本?...

    摘要: 刚刚安装的用友T3财务软件,登录后,基础设置操作正常,但登录总账模块时提示:不能登录到服务器(NHAWM),请检查服务器配置:FAILED:解析服务端数据出现错误,可能服务端是8.13的先前版 ...

最新文章

  1. Elasticsearch入常用RESTful API总结
  2. Linux中的火墙策略优化(iptables,firewalld)
  3. Python小游戏(24点小游戏)
  4. python:列表推导式
  5. 【java】ThreadLocal 内存泄漏 代码演示 实例演示
  6. ubuntn安装qt5.12.10
  7. 基于FPGA/数字IC的数字信号处理课程
  8. DT741-csf联通创维光猫桥接模式+华为WS5200路由器拨号设置
  9. GitHub 近两万 Star,无需编码,可一键生成前后端代码,开源项目
  10. 没英语基础怎么自学html5,没有一点英语基础怎么自学
  11. 逆向CrackMe-01写注册机
  12. 解决Linux上rar压缩包文件无法解压缩的问题
  13. 数据分析——人力资源
  14. latex作者不省略,加作者传记,latex图片取消自动编号,控制图片与上下文距离,段首取消空行。图的上下距离,去掉行间距
  15. mt店铺榜+餐饮分类
  16. 【信息系统项目管理师】项目管理十大知识领域记忆敲出(整体范围进度)
  17. Bat文件批量处理----DOS命令
  18. 软件全家桶-持续收录中(个人常用软件)
  19. 基于python的国内外研究现状_国内外研究现状评述
  20. 获取《使命召唤》模型及动画

热门文章

  1. reactjs render props向组件内部动态传入带内容的标签
  2. go flag包获取命令行参数使用示例
  3. Spark3.1.1 Docker镜像中修改/etc/hosts
  4. flink搭建集群(一主三从)
  5. Python3安装Scrapy爬虫框架
  6. 迄今看到的较为客观的一篇分析编程语言的文章
  7. JAVA中反射的实现过程和作用分别是什么?
  8. 简述Intel的MESI缓存一致性协议
  9. Spring Boot项目开启异步使用多线程完整代码案例
  10. Hexo搭建个人博客常用命令