使用jsr303实现数据校验
除了前端的js验证,服务端也可加入数据验证,springmvc中有两种方式可以验证输入
- 利用spring自带的验证框架
- 利用jsr303实现
jsr303实现数据校验
jsr303是java为bean数据合法性校验所提供的标准框架。jsr303不需要编写验证器,它定义了一套可标注在成员变量、属性方法上的校验注解。
springmvc支持jsr303标准的校验框架,spring的DataBinder在进行数据绑定时,可同时调用校验框架来完成数据校验工作,非常方便。
spring本身没有提供jsr303的实现,hibernate validator实现了jsr303,所以必须在项目中加入来自hibernate validator库的jar文件,复制hibernate-validator-4.3.2.Final-dist.zip中的三个jar文件即可,spring将会自动加载并装配
- hibernate-validator-4.3.2.Final.jar
- jboss-logging-3.1.0.CR2.jar
- validator-api-1.0.0.GA.jar
package edu.cn.pojo; import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import java.util.Date; public class User { @NotEmpty(message = "用户编码不能为空")
private String userCode; @NotEmpty(message = "用户名称不能为空")
private String userName; @NotNull(message = "密码不能为null")
@Length(min = 6, max = 10, message = "用户密码长度为6-10")
private String userPassword; @Past(message = "必须是一个过去的时间")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday; //省略... }
在上述代码中,@Length 表示被注释的字符串的大小必须在指定范围内,这是hibernate validator提供的扩展注解
下一步就需要在controller中使用注解所声明的限制规则来进行数据的校验。由于<mvc:annotation-driven/>会默认装配好一个LocalValidatorFactoryBean,通过在controller的处理方法的入参上标注@Valid注解即可让springmvc在完成数据绑定之后,指定数据校验的工作。代码如下
@RequestMapping(value = "/add.html", method = RequestMethod.POST)
public String addSave(@Valid User user, BindingResult bindingResult, HttpSession session){
if (bindingResult.hasErrors()){
return "user/useradd";
}
user.setCreatedBy(((User)session.getAttribute("userSession")).getId());
user.setCreationDate(new Date());
if (userService.add(user)){
return "redirect:/user/userlist.html";
}
return "user/useradd";
}
@Valid注解在validator-api依赖下,BindResult接口在spring-context依赖下
在上述代码中,在入参对象user前标注了@Valid注解,也就意味着将会调用校验框架,根据注解声明的校验规则实施校验,校验的结果存入后面紧跟的入参中,并且这个入参必须是BindingResult或者Error类型。在该方法体内,首先根据BindingResult来判断是否存在错误。
使用jsr303实现数据校验的更多相关文章
- JSR303的数据校验-Hibernate Validator方式实现
1.什么是JSR303? JSR303是java为bean数据合法性校验所提供的一个标准规范,叫做Bean Validation. Bean Validation是一个运行时的数据校验框架,在验证之后 ...
- Java数据校验(Bean Validation / JSR303)
文档: http://beanvalidation.org/1.1/spec/ API : http://docs.jboss.org/hibernate/beanvalidation/spec/1. ...
- SpringMVC框架07——服务器端JSR303数据校验
1.数据校验概述 数据校验分为客户端校验和服务器端校验,客户端主要是通过过滤正常用户的误操作,是第一道防线,一般使用JavaScript代码实现.但是只有客户端校验是不够的,攻击者可以绕过客户端验证直 ...
- [SpringBoot] - 配置文件的多种形式及JSR303数据校验
Springboot配置文件: application.yml application.properties(自带) yml的格式写起来稍微舒服一点 在application.properties ...
- YAML语法使用,JSR303数据校验
YAML YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写 # yaml配置 server: prot: YAML语 ...
- Springboot:JSR303数据校验(五)
@Validated //开启JSR303数据校验注解 校验规则如下: [一]空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @No ...
- springMVC使用JSR303数据校验
JSR303注解 hibernate validate是jsr 303的一个参考实现,除支持所有的标准校验注解外,他还支持扩展注解 spring4.0拥有自己独立的数据校验框架,同时支持jsr 303 ...
- springboot配置(yami配置文件,JSR303数据校验,多环境配置)
yami配置文件 YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:&q ...
- 使用JSR-303进行后台数据校验
一.在SringMVC中使用 使用注解 1.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-validator-4.2.0.Fina ...
随机推荐
- poj 2763 Housewife Wind(树链剖分+单点查询+区间修改)
题目链接:http://poj.org/problem?id=2763 题意:给一个数,边之间有权值,然后两种操作,第一种:求任意两点的权值和,第二,修改树上两点的权值. 题解:简单的树链剖分. #i ...
- poj 1456 Supermarket(贪心+优先队列)
题目链接:http://poj.org/problem?id=1456 题意:有N件商品,分别给出商品的价值和销售的最后期限,只要在最后日期之前销售处,就能得到相应的利润,并且销售该商品需要1天时间. ...
- 深度递归必须知道的尾调用(Lambda)
引导语 本文从一个递归栈溢出说起,像大家介绍一下如何使用尾调用解决这个问题,以及尾调用的原理,最后还提供一个解决方案的工具类,大家可以在工作中放心用起来. 递归-发现栈溢出 现在我们有个需求,需要计算 ...
- 告别组件之教你使用原生js和css写移动端轮播图
在工作中由于项目需要要写一个轮播图,本想使用组件直接调用实现快速开发,但是一想到自己经常使用组件但是让自己手写的话确实一点都不会. 一个不会手写组件的前端程序员不是一个好程序员!于是打算自己手写一个. ...
- 02 python 必知
一.变量 1.变量的定义 将程序运算的中间结果临时存在内存里,以便后续代码调用. 2.变量的使用规范 1)变量必须要有数字,字母,下划线,任意组合. 2)变量不能数字开头. 3)不能是python中的 ...
- 小米下拉框jQuery实现
<div class="daohanglan"> <div class="dh">小米手机 <--多个自己定义--> < ...
- JSP标签介绍
JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. jsp的常用标签有以下三个 <j ...
- flex布局笔记整理
flex布局笔记整理 了解-webkit-box 利用postcss进行css代码的向后兼容时,display:flex兼容后的代码常会带有display:-webkit-box. 部分移动端内核较低 ...
- SpringBoot整合Elasticsearch详细步骤以及代码示例(附源码)
准备工作 环境准备 JAVA版本 java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121 ...
- AMBA——slave的HREADY信号
在前几天的ARM面试中,被问到总线架构,主要是AMBA那一套东西.对于AMBA之前上课学过一点,但很肤浅.为了面试上网查了一下.也看了部分协议补充了一下,但是接触的少,理解的不深入,被问到之前没遇到的 ...