通过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;
}
}
上一篇:谈谈你对java平台的理解?


下一篇:POJ1038 Bugs Integrated, Inc 状压DP+优化