zoukankan      html  css  js  c++  java
  • 通过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;
      }
    }
  • 相关阅读:
    hdu4725 The Shortest Path in Nya Graph
    poj2679 Adventurous Driving 最短路
    线段树完全版【代码集合
    LCS!LCS!
    bzoj2763: [JLOI2011]飞行路线
    bzoj3389: [Usaco2004 Dec]Cleaning Shifts安排值班
    [ 浙江大学 数据库系统原理 ] [ MiniSQL ]课程设计
    [ 浙江大学 程序设计专题 ] 四个专题代码 报告 PPT共享
    [ C语言 ] 迷宫 迷宫生成器 [ 递归与搜索 ]
    [ C语言版 ] 数独计算器 [ 搜索剪枝法 ]
  • 原文地址:https://www.cnblogs.com/zjfjava/p/10577183.html
Copyright © 2011-2022 走看看