3.数据校验和SpringEL
1.数据验证
数据验证不应该被限定在web层去处理,他应该在任何需要做数据验证的地方做验证;
基于以上考虑,Spring设计了一个既方便又可以在所有层使用的Validator接口
Spring提供了Validator接口来进行对对象的验证,该接口实现2个方法
supports(Class)-判断该validator是否能校验提供的class的实例
validate(Object, org.springframework.validation.Errors)- 校验给定的对象,如果有校验失败信息,将其放入Errors对象
另外,Spring还完全支持JSR-303 Bean Validation
Hibernate Validation是Bean Validation的参考实现,提供了JSR-303规范的所有内置实现
SpringMVC还支持声明式验证@Controller输入。
2.SpringEL简介
Spring表达式语言(简称SpEL)是一个支持查询和操作运行时对象导航图功能的强大的表达式语言
它的语法类似于传统EL,但提供额外的功能,最出色的就是函数调用和简单字符串的模板函数
虽然SpEL引擎作为Spring 组合里的表达式解析的基础 ,但它不直接依赖于Spring,可独立使用
SpEL支持以下功能:
文字表达式 布尔和关系运算符 正则表达式
类表达式 访问 properties, arrays, lists, maps
方法调用 关系运算符 调用构造函数
Bean引用 构造Array 内嵌lists
内嵌maps 三元运算符 用户定义的函数
集合投影 集合筛选 模板表达式
接口ExpressionParser负责解析表达式字符串,例如:
3.SpringEL使用
SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复杂表达式,存取对象属性、对象方法调用
SpEL表达式可以与XML或基于注解的配置元数据使用定义
定义表达式的语法形式:#{<表达式字符串>}
基于XML的配置元数据
基于注解的配置元数据:
SpringEL使用实例:
1.方法 2.构造 3.操作符 4.集合
SpringEL方法:
SpringEL允许开发者将一个对象的属性注入给另一个对象属性,也可以调用一个对象的方法,并将返回值注入给另一个对象的属性。
SpringEL 构造:
SpringEL允许开发者调用new关键字,实现构造方法调用,并实例化出对象
SpringEL支持大多数的算数运算符、关系运算符、逻辑运算符、三元运算符等
SpringEL集合
SpringEL支持对List、Properties、Map等集合的操作,还支持集合选择、集合投影等
SpringEL集合选择
.?[]可以设置筛选条件
.^[]获取第一个匹配项
.$[]获取最后一个匹配项
SpringEL集合投影
.![]可以选择特定属性
SpringEL 集合选择和集合投影结合使用
3.数据校验和SpringEL的更多相关文章
- Struts2基础数据校验和框架校验
一:三种校验的方式 1.用validate()方法实现数据校验 2.用execute()方法实现数据校验 3.用validateXxx()方法实现数据校验 1.用validate()方法实现数据校验 ...
- Spring_数据校验和自定义检验规则和分组校验
@Validated :绑定需要校验的数据. 数据校验规则:为数据绑定校验的规则 private Long booId;@NotNull(message = "不能为空")pri ...
- SpringBoot-03-JSR303数据校验和多环境切换
3.3 JSR303数据校验 先看如何使用 Springboot中可以用@Validated来校验数据,如果数据异常则统一抛出异常,方便异常中心统一处理. 这里我们写个注解让name只支持Em ...
- 在DevExpress程序中使用Winform分页控件直接录入数据并保存
一般情况下,我们都倾向于使用一个组织比较好的独立界面来录入或者展示相关的数据,这样处理比较规范,也方便显示比较复杂的数据.不过在一些情况下,我们也可能需要直接在GridView表格上直接录入或者修改数 ...
- 大数据时代之hadoop(四):hadoop 分布式文件系统(HDFS)
分布式文件系统即是网络中多台计算机组合在一起提供一个统一存储及管理的系统. Hadoop提供了一个文件系统接口和多个分布式文件系统实现,其中比较重要的就是HDFS(Hadoop Distributed ...
- Redis进阶:数据持久化,安全,在PHP中使用
一.redis数据持久化 由于redis是一个内存数据库,如果系统遇到致命问题需要关机或重启,内存中的数据就会丢失,这是生产环境所不能允许的.所以redis提供了数据持久化的能力. redis提供了两 ...
- 9.ORM数据访问
1.Spring对ORM的支持 ORM : 对象关系映射(Object Relational Mapping)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术基于ORM的数据持久层框架有: ...
- HDFS写数据和读数据流程
HDFS数据存储 HDFS client上传数据到HDFS时,首先,在本地缓存数据,当数据达到一个block大小时.请求NameNode分配一个block. NameNode会把block所在的Dat ...
- ESA2GJK1DH1K升级篇: 关于升级篇数据校验
前言 鉴于大家都希望升级的时候加入数据校验,所以就满足大家的要求. 其实我也希望自己做的足够的稳定可靠,让大家使用起来放心. 上一节测试了一节加入校验以后的操作方式,这节来详细的说一下校验部分的代码. ...
随机推荐
- Cocos2d-x 网络编程
主要介绍内容:Http协议,Socket协议,webSocket协议, Cocos2d-x中的相关类和方法 1 Http协议 HTTP协议也叫超文本传输协议.是互联网广泛使用的通信协议,常用于B/S架 ...
- c++中怎么实现Java中finally语句
所有学习c++的书籍都明确提出了,不要使用goto, 以免造成程序流程的混乱,使理解和调试程序都产生困难. 但是我们遇到这样一个场景怎么办:就是不管程序执行成功与否,都要执行一些资源释放语句,相当ja ...
- C# 实现文件(夹)在ftp服务器间的同步【无需将文件(夹)保存到本地】
C#实现不同ftp服务器间文件(夹)同步 图1 实现不同ftp服务器间文件(夹)同步的实现思路图 /// <summary> /// 将文件夹1从ftp服务器1移到ftp服务器2文件夹2 ...
- 非阻塞socket与epoll
阻塞socket. –阻塞调用是指调用结果返回之前,当前线程会被挂起.函数只有在得到结果之后才会返回. –对于文件操作read,fread函数调用会将线程阻塞. –对于socket,accept与re ...
- [译]Javascript中的mutators
本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...
- C#字符串拼接的三种方式
static void Main(string[] args) { string name = "asher"; //方法1 string str1 = "hello & ...
- C#修饰符讲解大全
1.修饰符是什么? 修饰符是用于限定类型以及类型成员的声明的一种符号.[百度百科] 2.修饰符分类 13种修饰符,按功能可分为三类:访问修饰符,类修饰符和成员修饰符.[百度百科] 作 用:限定类型以及 ...
- 【bzoj1853】: [Scoi2010]幸运数字 数论-容斥原理
[bzoj1853]: [Scoi2010]幸运数字 预处理出所有幸运数字然后容斥原理 但是幸运数字是2logn个数的 直接搞会炸 所以把成倍数的处理掉 然后发现还是会T 所以数字要从大到小处理会快很 ...
- git pull 命令
作用:取回远程主机某个分支的更新,再与本地的指定分支合并 格式:git pull <远程主机名> <远程分支名>:<本地分支名> 1. 如果与当前分支合并,则可省 ...
- 线段树 SP1716 GSS3 - Can you answer these queries III
SP1716 GSS3 - Can you answer these queries III 题意翻译 n 个数,q 次操作 操作0 x y把A_xAx 修改为yy 操作1 l r询问区间[l, r] ...