在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; } }