使用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 ...
随机推荐
- CF989C A Mist of Florescence 构造 思维好题 第八题
A Mist of Florescence time limit per test 1 second memory limit per test 256 megabytes input standar ...
- codeforces 768 B. Code For 1(二分)
题目链接:http://codeforces.com/contest/768/problem/B 题意:给你一个数n和区间l,r,每次都能把任意数拆成n/2,n%2,n/2三个数,直到变成0和1,问区 ...
- git bash下添加忽略文件列表
转载自:https://blog.csdn.net/weixin_42808389/article/details/81232119 在用KEIL 5(MDK ARM)开发项目时需要用到GIT管理代码 ...
- 漫谈JavaScript中的提升机制(Hoisting)
前言 刚接触到JavaScript的时候,便知道JavaScript是按顺序执行的,是如浏览器的解析DOM树一样的流程,解析DOM结构的时候,如果遇到JS脚本或者外联脚本便会停止解析,继续下载脚本之后 ...
- java基础面试(二)
最近有搜了几个面试题,大家一起来探讨一下. 1.Oracle 的分页 --分页查询一 select * from (select a1.*,rownum rn from (select * from ...
- Request请求的应用
1.通过request获得请求行 获得客户端的请求方式:String getMethod() 获得请求的资源: String getRequestURI() StringBuffer getReq ...
- 一次使用scrapy的问题记录
前景描述: 需要获取某APP的全国订单量,及抢单量.由于没有全国的选项所以只能分别对每一个城市进行订单的遍历.爬虫每天运行一次,一次获取48小时内的订单,从数据库中取出昨天的数据进行对比,有订单被抢则 ...
- 【LeetCode】Two Sum II - Input array is sorted
[Description] Given an array of integers that is already sorted in ascending order, find two numbers ...
- 最佳内存缓存框架Caffeine
Caffeine是一种高性能的缓存库,是基于Java 8的最佳(最优)缓存框架. Cache(缓存),基于Google Guava,Caffeine提供一个内存缓存,大大改善了设计Guava's ca ...
- python django+bootstrap4+mysql智慧交通系统构建
之前,我做了一个实训的项目,但是一直没有展示如何做的,现在就让我讲解一下如何用django+bootstrap4+mysql实现这个智慧交通系统.这里用到的是网页的bootstrap4框架和mysql ...