通过groovy表达式拓展oval——实现根据同一实体中的其他属性值对某个字段进行校验
在java的参数校验中,开源验证框架OVAL基本能够满足所有需求,如下面通过简单的添加注解,就可实现对参数的非空和长度校验。
@NotNull(message="计息周期月数不能为空")
@NotBlank(message="计息周期月数不能为空字符")
@Length(max=5, message="计息周期月数长度最大不能超过5")
private String iccmc;
当涉及到较复杂的校验时,oval也能支持,如:要根据同一实体中的其他属性的值来实现对某个属性的校验,可以通过在注解中编写groovy表达式来实现校验逻辑。
步骤:
1. 引入groovy相关依赖
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${groovy.version}</version>
</dependency>
2. 实体类
import java.io.Serializable;
import net.sf.oval.constraint.Length;
import net.sf.oval.constraint.NotBlank;
import net.sf.oval.constraint.NotNull; public class DemoDto implements Serializable
{
@NotNull(message="计息周期月数不能为空")
@NotBlank(message="计息周期月数不能为空字符")
@Length(max=5, message="计息周期月数长度最大不能超过5")
private String iccmc; @NotNull(message="业务品种不能为空")
@Length(max=32, message="业务品种长度最大不能超过32")
private DemoBusinessTypeEnum businessType; //如果是学业贷款,利率增长方式可以为空,否则,该字段必填
@NotNull(when="groovy:_this.businessType!=null && _this.businessType.getCode() != '1019' ", message="利率增长方式不能为空")
@Length(max=18, message="利率增长方式长度最大不能超过18")
private DemoRateIncreaseEnum rateIncreaseType;
/*
*getter & setter
*/
DemoBusinessTypeEnum.java
public enum DemoBusinessTypeEnum
{
SHORT_1005005001("1005005001", "农业贷款"),
SHORT_1005005005("1005005005", "旅游业贷款"),
SHORT_1005005010("1005005010", "制造业贷款"),
TICKET_1019("1019", "学业贷款"); private String code;
private String desc; private DemoBusinessTypeEnum(String code, String desc)
{
this.code = code;
this.desc = desc;
} public static DemoBusinessTypeEnum findBycode(String code)
{
DemoBusinessTypeEnum[] arry = values();
int len = arry.length;
for (int i = 0; i < len; i++)
{
DemoBusinessTypeEnum frs = arry[i];
if (frs.getCode().equals(code)) {
return frs;
}
}
return null;
} public String getCode()
{
return this.code;
}
public String getDesc()
{
return this.desc;
}
}
通过groovy表达式拓展oval——实现根据同一实体中的其他属性值对某个字段进行校验的更多相关文章
- Lambda表达式Contains方法(等价于SQL语句中的like)使用注意事项
		
貌似已经半年多没写一篇帖子了,充分的说明要么老总一天折腾的让人心齐疲惫,没心情去写:要么另外一种可能就是自己不思进取,说白了就是懒.好在这种状态在今天被打破了.MoNey加油. 众所周知,想在Enti ...
 - linq 在查询表达式中处理 null 值
		
此示例显示如何在源集合中处理可能的 null 值. IEnumerable<T> 等对象集合可包含值为 null 的元素. 如果源集合为 null 或包含值为 null 的元素,并且查询不 ...
 - 转:el表达式获取map对象的内容 & js中使用el表达式 & js 中使用jstl 实现 session.removeattribute
		
原文链接: ①EL表达式取Map,List值的总结 ②在jsp中使用el表达式通过键获得后台的一个map<Long,String>的值 ③在javascript中使用el表达式(有图有真相 ...
 - SoapUI利用Groovy把外部数据加载到request中
		
默认已经用Groovy把外部数据给读取出来了,关键是读取出来后,如何加载到request中去?这里提供了两种方法:1.该Groovy脚本的名称是"setUp" def num = ...
 - struts框架中OGNL表达式的使用之jsp页面获取action中的属性值
		
在jsp页面中获取action中的值: 1.写一个action类OgnlAction类: 需要注意的地方: 如果在aciton中直接使用ognl表达式,将值存储的值栈中,是不能通过跳转将值传到jsp页 ...
 - 使用表达式目录树实现SqlDataReader到实体的映射
		
SqlDataReader映射实体,是ORM的基础功能,常见的实现方式有反射.表达式目录树和emit,这里要说的就是用表达式目录树生成实体的方法. 先分析下思路: 假设有个数据实体类,Student ...
 - 添加谷歌拓展程序 vue.js devtools过程中的问题
		
在用vue做项目过程中,需要用到vue.js devtools,在从github上面clone下来代码,然后再npm install ,过程报错,然后更新npm包也是会有问题,以下是install的问 ...
 - Cron表达式在 定时执行专家 5.0 中的使用方式
		
在<定时执行专家 V5.0>程序内部使用了包含 6 位的 Cron表达式,第一个字段(second)没有使用.程序内部一直 second 位是 0.在 Cron表达式的界面上可以设置 5位 ...
 - 57.2拓展之纯 CSS 创作黑暗中会动的眼睛和嘴巴
		
效果地址:https://scrimba.com/c/cbNkBnuV HTML code: <!-- 定义dom, .eyes容器中包含2个元素 --> <div class=&q ...
 
随机推荐
- Linux下java开发环境配置总结
			
1 安装JDK,卸载以前的jdk,安装jdk1.8 : 参考:http://www.jb51.net/os/RedHat/73016.html 需要注意配置环境变量中的路径要和当前安装的jdk路径一致 ...
 - VS2013 FFmpeg开发环境配置
			
1.下载ffmpeg包(dll.include.lib) https://ffmpeg.zeranoe.com/builds/ 有3个版本:Static.Shared和Dev St ...
 - ASP.NET MVC 路由篇二
			
轉載 http://www.cnblogs.com/yaozhenfa/p/asp_net_mvc_route_2.html 7.解决与物理路径的冲突 当发送一个请求至ASP.NET MVC时,其实会 ...
 - scrapy response.xpath可以提取包含字符XX的标签
			
1. 筛选属性包含某字符串的标签(如id = 'bigbaong' 查询包含'big'字符的就可以筛选到) res = response.xpath("//a[contains(@id, ...
 - VC9、VC11、VC14、VC15库 32位 64位 免费下载
			
VC9.VC11.VC14.VC15库 32位 64位 免费下载 更新版本的PHP是用VC11,VC14或VC15(分别为Visual Studio 2012,2015或2017编译器)构建的,并且包 ...
 - poj 1386 Play on Words门上的单词【欧拉回路&&并查集】
			
题目链接:http://poj.org/problem?id=1386 题目大意:给你若干个字符串,一个单词的尾部和一个单词的头部相同那么这两个单词就可以相连,判断给出的n个单词是否能够一个接着一个全 ...
 - poj3311
			
poj3311我写的第一篇状压dp,调试了好久23333,其实状压就是二进制结合位运算,把整体的状态用二进制来表示,一般是0/1,用没用过或者走没走没走过的问题,其实这种思想在搜索中也有涉及过,与dp ...
 - burpsuite https证书设置
			
java更新.burpsuite换来换去,chrome的证书似乎失效了.重新来一边证书导入,有一些导入方法确实坑. 尝试了直接导入到受信任的机构是无效的. 两年前就因为导入到受信任的机构,又找不到导入 ...
 - YOLO系列:YOLO v2深度解析 v1 vs v2
			
概述 第一,在保持原有速度的优势之下,精度上得以提升.VOC 2007数据集测试,67FPS下mAP达到76.8%,40FPS下mAP达到78.6%,可以与Faster R-CNN和SSD一战 第二, ...
 - VsVim的快捷键
			
VsVim - Shortcut Key (快捷键) Enable / Disable 还可以通过 Ctrl+Shift+F12 在 Visual Studio 中实现 Enable / Disabl ...