通过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;
  }
}
posted @ 2019-03-27 01:16  雪山上的蒲公英  阅读(743)  评论(0编辑  收藏  举报
/* 返回顶部代码 */