如果需要不同条件验证不同的属性的时候,需要使用profiles属性,每个校验注解符中都有。注意:oVal默认是启用所有的profiles,所以在对单独一个profile进行启用的时候,需要先disableAllProfiles

当使用除了@NotNull之外的校验符时,需使用@NotNull先校验,否则其他校验符不起作用。譬如当使用@ValidateWithMethod校验符的时候,需要先使用@NotNull进行校验

全部Bean properties代码如下:

@Data
public class NewHouseInputParam { @NotNull(errorCode = "-10001", message = "orderId不能为空")
private Long orderId;// 订单Id
@NotNull(errorCode = "-1", message = "INPUT订单状态不能为空")
private Integer status; //(1,"录入报备",""),(2,"录入到访",""),(3,"录入无效",""),(4,"录入下定",""),(5,"录入成交",""),(6,"录入开票",""),(7,"录入结佣",""), //报备录入
@NotNull(profiles = {"profile_1"},errorCode = "-1", message = "报备日期不能为空")
@ValidateWithMethod(profiles = {"profile_1"},methodName = "isValidDate",parameterType = String.class,
errorCode = "-1", message = "报备日期不合法")
private String applyDate;// 报备日期 //到访录入
@NotNull(profiles = {"profile_2"},errorCode = "-1", message = "到访日期不能为空")
@ValidateWithMethod(profiles = {"profile_2"},methodName = "isValidDate",parameterType = String.class,
errorCode = "-1", message = "到访日期不合法")
private String visitDate;// 到访日期
@NotNull(profiles = {"profile_2"},errorCode = "-1", message = "到访确认单照片不能为空")
private String visitImgKey;// 到访确认单照片 //下定录入
@NotNull(profiles = {"profile_4"},errorCode = "-1", message = "下定合同照片不能为空")
private String bookImgKey;// 下定合同照片
@NotNull(profiles = {"profile_4"},errorCode = "-1", message = "产品id不能为空")
private Long bookProductId;// 产品id
@NotNull(profiles = {"profile_4"},errorCode = "-1", message = "下定合同编号不能为空")
@MaxLength(value = 20,profiles = {"profile_4"},errorCode = "-1", message = "下定合同编号不合法")
private String bookContractCode;// 下定合同编号 @NotNull(profiles = "profile_4",errorCode = "-1", message = "下定金额不能为空")
@ValidateWithMethod(profiles = {"profile_4"},methodName = "isValid6Money",parameterType = String.class,
errorCode = "-1", message = "下定金额不合法")
private String bookPrice;// 下定金额
@NotNull(profiles = "profile_4",errorCode = "-1", message = "购房总价不能为空")
@ValidateWithMethod(profiles = {"profile_4"},methodName = "isValid9Money",parameterType = String.class,
errorCode = "-1", message = "购房总价不合法")
private String bookTotalPrice;// 购房总价
@NotNull(profiles = "profile_4",errorCode = "-1", message = "预计佣金不能为空")
@ValidateWithMethod(profiles = {"profile_4"},methodName = "isValid9Money",parameterType = String.class,
errorCode = "-1", message = "预计佣金不合法")
private String bookPossibleCommission;// 预计佣金
@NotNull(profiles = "profile_4",errorCode = "-1", message = "下定日期不能为空")
@ValidateWithMethod(profiles = {"profile_4"},methodName = "isValidDate",parameterType = String.class,
errorCode = "-1", message = "下定日期不合法")
private String bookDate;// 下定日期 //成交录入
@NotNull(profiles = {"profile_5"},errorCode = "-1", message = "合同照片不能为空")
@MinLength(profiles = "profile_5",value = 1,errorCode = "-1",message = "合同照片不能为空")
private String dealImgKey;// 合同照片
@NotNull(profiles = {"profile_5"},errorCode = "-1", message = "合同总价不能为空")
@ValidateWithMethod(profiles = {"profile_5"},methodName = "isValid6Money",parameterType = String.class,
errorCode = "-1", message = "合同总价不合法")
private String dealContractPrice;// 合同总价
@NotNull(profiles = {"profile_5"},errorCode = "-1", message = "产品Id不能为空")
private Long dealProductId;// 产品Id
@NotNull(profiles = {"profile_5"},errorCode = "-1", message = "合同编号不能为空")
@MinLength(profiles = "profile_5",value = 1,errorCode = "-1",message = "合同编号不能为空")
private String dealContractCode;// 合同编号
@NotNull(profiles = {"profile_5"},errorCode = "-1", message = "应收佣金不能为空")
@ValidateWithMethod(profiles = {"profile_5"},methodName = "isValid6Money",parameterType = String.class,
errorCode = "-1", message = "应收佣金不合法")
private String dealReceivableCommission;// 应收佣金
@NotNull(profiles = {"profile_5"},errorCode = "-1", message = "成交日期不能为空")
@ValidateWithMethod(profiles = {"profile_5"},methodName = "isValidDate",parameterType = String.class,
errorCode = "-1", message = "成交日期不合法")
private String dealDate;// 成交日期
@NotNull(profiles = {"profile_5"},errorCode = "-1", message = "室不能为空")
@Range(profiles = {"profile_5"},min = 0,max = 9,errorCode = "-1", message = "室不合法")
private Integer bedroomSum;// 室
@NotNull(profiles = {"profile_5"},errorCode = "-1", message = "厅不能为空")
@Range(profiles = {"profile_5"},min = 0,max = 9,errorCode = "-1", message = "厅不合法")
private Integer livingRoomSum;// 厅
@NotNull(profiles = {"profile_5"},errorCode = "-1", message = "卫不能为空")
@Range(profiles = {"profile_5"},min = 0,max = 9,errorCode = "-1", message = "卫不合法")
private Integer wcSum;// 卫
@NotNull(profiles = {"profile_5"},errorCode = "-1", message = "面积不能为空")
@ValidateWithMethod(profiles = {"profile_5"},methodName = "isValid4Money",parameterType = String.class,
errorCode = "-1", message = "面积不合法")
private String spaceArea;// 面积
@NotNull(profiles = {"profile_5"},errorCode = "-1", message = "室号不能为空")
@MaxLength(profiles = {"profile_5"},value = 10,errorCode = "-1", message = "室号非法")
private String room;// 室号
@NotNull(profiles = {"profile_5"},errorCode = "-1", message = "楼栋号不能为空")
@MaxLength(profiles = {"profile_5"},value = 10,errorCode = "-1", message = "楼栋号非法")
private String building;// 楼栋号 //开票录入
@NotNull(profiles = {"profile_6"},errorCode = "-1", message = "开票金额不能为空")
@ValidateWithMethod(profiles = {"profile_6"},methodName = "isValid6Money",parameterType = String.class,
errorCode = "-1", message = "开票金额不合法")
private String invoicePrice;// 开票金额
@NotNull(profiles = {"profile_6"},errorCode = "-1", message = "开票日期不能为空")
@ValidateWithMethod(profiles = {"profile_6"},methodName = "isValidDate",parameterType = String.class,
errorCode = "-1", message = "开票日期不合法")
private String invoiceDate;// 开票日期 //结佣录入
@NotNull(profiles = {"profile_7"},errorCode = "-1", message = "结佣金额不能为空")
@ValidateWithMethod(profiles = {"profile_7"},methodName = "isValid6Money",parameterType = String.class,
errorCode = "-1", message = "结佣金额不合法")
private String commissionPrice;// 结佣金额
@NotNull(profiles = {"profile_7"},errorCode = "-1", message = "结佣日期不能为空")
@ValidateWithMethod(profiles = {"profile_7"},methodName = "isValidDate",parameterType = String.class,
errorCode = "-1", message = "结佣日期不合法")
private String commissionDate;// 结佣日期 //失效录入
@NotNull(profiles = {"profile_3"},errorCode = "-1", message = "失效原因不能为空")
@MaxLength(profiles = {"profile_3"},value = 100,errorCode = "-1", message = "失效原因不合法")
private String invalidDesc;// 失效原因 @Override
public String toString() {
return "NewHouseInputParam{" +
"orderId=" + orderId +
", status=" + status +
", applyDate='" + applyDate + '\'' +
", visitDate='" + visitDate + '\'' +
", visitImgKey='" + visitImgKey + '\'' +
", bookImgKey='" + bookImgKey + '\'' +
", bookProductId=" + bookProductId +
", bookContractCode='" + bookContractCode + '\'' +
", bookPrice=" + bookPrice +
", bookTotalPrice=" + bookTotalPrice +
", bookPossibleCommission=" + bookPossibleCommission +
", bookDate='" + bookDate + '\'' +
", dealImgKey='" + dealImgKey + '\'' +
", dealContractPrice=" + dealContractPrice +
", dealProductId=" + dealProductId +
", dealContractCode=" + dealContractCode +
", dealReceivableCommission=" + dealReceivableCommission +
", dealDate='" + dealDate + '\'' +
", bedroomSum=" + bedroomSum +
", livingRoomSum=" + livingRoomSum +
", wcSum=" + wcSum +
", spaceArea='" + spaceArea + '\'' +
", room='" + room + '\'' +
", building='" + building + '\'' +
", invoicePrice='" + invoicePrice + '\'' +
", invoiceDate='" + invoiceDate + '\'' +
", commissionPrice='" + commissionPrice + '\'' +
", commissionDate='" + commissionDate + '\'' +
", invalidDesc='" + invalidDesc + '\'' +
'}';
} /**
* 验证日期格式是否合法
* @param date
* @return
*/
public boolean isValidDate(String date){
Date d = DateUtil.stringToDate(date, "YYYY-MM-dd");
return d != null;
} /**
* 验证范围{0.00-9999.99}
* @param money
* @return
*/
private boolean isValid4Money(String money){
money = numericalMax2Points(money);
if(money != null){
float f = Float.parseFloat(money);
if(f >= 0 && f < 10000){
return true;
}
}
return false;
} /**
* 验证范围{0.00-999999.99}
* @param money
* @return
*/
private boolean isValid6Money(String money){
money = numericalMax2Points(money);
if(money != null){
float f = Float.parseFloat(money);
if(f >= 0 && f < 1000000){
return true;
}
}
return false;
} /**
* 验证范围{0.00-999,999,999.99}
* @param money
* @return
*/
private boolean isValid9Money(String money){
money = numericalMax2Points(money);
if(money != null){
float f = Float.parseFloat(money);
if(f >= 0 && f < 1000000000){
return true;
}
}
return false;
} /**
* 判断在去除","后是否是数字,并且最多两位小数
* 正确则返回处理后的money
* 否则返回null
* @param money
* @return
*/
private String numericalMax2Points(String money){
try {
if (money != null) {
if (money.indexOf(",") > 0 || money.indexOf(",") > 0) {
money = StringUtil.remove(money, ',');
money = StringUtil.remove(money, ',');
}
if (money.matches("-?[0-9]+.?([0-9]{0,2})")) {
return money;
}
}
}catch (Exception e){}
return null;
}
}
    使用oVal代码,自己封装的Response:
//验证参数是否正确
WeixinEntValidatorUtil util = WeixinEntValidatorUtil.getInstance();
util.disableAllProfiles();
util.enableProfile("profile_" + param.getStatus());
res = util.validate(param);
if(res.getStatus() != null && res.getStatus() != 0){
return res;
}

WeixinEntValidatorUtil代码如下:

public class WeixinEntValidatorUtil extends ValidatorUtil<Response> {
private static final WeixinEntValidatorUtil WEIXIN_ENT_VALIDATOR_UTILS = new WeixinEntValidatorUtil(); public static WeixinEntValidatorUtil getInstance(){return WEIXIN_ENT_VALIDATOR_UTILS;} /**
* 失败
* @param errorCode
* @param message
* @return
*/
@Override
protected Response transferResponse(String errorCode, String message) {
Integer errorCodeInt;
try {
errorCodeInt = Integer.parseInt(errorCode);
}catch (Exception e) {
errorCodeInt = -1;
}
return new Response(errorCodeInt,message);
} /**
* 成功
* @param o
* @return
*/
@Override
protected Response succResponse(Object o) {
return new Response(0,"");
} public Response validate(Object o){return getInstance()._validate(o);} @Override
protected Response _validate(Object o) {
return super._validate(o);
}
}

父类代码:

public abstract class ValidatorUtil<T> {

    private static final Validator validator = new Validator();

    protected abstract T transferResponse(String errorCode,String message);

    protected abstract T succResponse(Object o);

    /**
* if the object is null then the util by oval will throw exception
* @param o
* @return
*/
protected T _validate (Object o) {
List<ConstraintViolation> violations = validator.validate(o);
if (violations.size() > 0) {
//System.out.println(violations);
return transferResponse(violations.get(0).getErrorCode(),violations.get(0).getMessage());
}
return succResponse(o);
} public void disableProfile(String profileName){
validator.disableProfile(profileName);
} public void disableAllProfiles(){
validator.disableAllProfiles();
} public void enableProfile(String profileName){
validator.enableProfile(profileName);
} public void enableAllProfiles(){
validator.enableAllProfiles();
} }

使用oVal进行Java Bean 验证的注意事项的更多相关文章

  1. java ee7 -- Java Bean验证

    针对对象.对象成员.方法.构造函数的数据验证. 1. 一个验证的小例子 (1) 添加引用jar <dependency> <groupId>org.hibernate.vali ...

  2. Java参数验证Bean Validation 框架

    1.为什么要做参数校验? 参数校验和业务逻辑代码分离,参数校验代码复用,统一参数校验方式.校验不太通过时统一异常描述. 2.bean validation规范 JSR303 规范(Bean Valid ...

  3. java bean 属性验证框架 valid

    项目介绍 java 开发中,参数校验是非常常见的需求. 但是 hibernate-validator 在使用过程中,依然会存在一些问题. 特性 支持 fluent-validation 支持 jsr- ...

  4. 深入了解数据校验:Java Bean Validation 2.0(JSR380)

    每篇一句 吾皇一日不退役,尔等都是臣子 相关阅读 [小家Java]深入了解数据校验(Bean Validation):基础类打点(ValidationProvider.ConstraintDescri ...

  5. 用大白话聊聊JavaSE -- 如何理解Java Bean(一)

    首先,在开始本章之前,先说一个总的概念:所谓的Java Bean,就是一个java类,编译后成为了一个后缀名是 .class的文件.这就是Java Bean,很多初学者,包括当年的我自己,总是被这些专 ...

  6. Java Bean、POJO、 Entity、 VO 、PO、DAO

    Java Bean.POJO. Entity. VO , 其实都是java 对象,只不过用于不同场合罢了.    Java Bean: 就是一个普通的Java 对象, 只不过是加了一些约束条件.  声 ...

  7. [Java] JSP笔记 - Java Bean

    一. Java Bean 是什么? Java Bean 其实就是一个符合特定规则的 Java Class.这些规则包括: 使用 public 声明的公用类 属性使用public 的get,set方法访 ...

  8. Java Bean

    Java 帝国之Java bean (上) Java 帝国之Java bean(下) Difference between DTO, VO, POJO, JavaBeans? Java bean 是个 ...

  9. Java bean validation 规范与参考实现

    1.Apache Bval 依赖包:validation-api-1.1.0.Final.jar org.apache.bval.bundle-1.1.1.jar bval-core-1.1.1.ja ...

随机推荐

  1. gitlab在push代码的时候报错

    一.问题报错 gitlab在执行git pull origin master,拉取代码的时候报如下错误. $ git pull origin master remote: Counting objec ...

  2. 通过redis实现session共享-php

    <?php class redisSession{ /** * 保存session的数据库表的信息 */ private $_options = array( 'handler' => n ...

  3. 查询表的大小(mysql)

    --所有表的大小 select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') from information_schema.tables where ...

  4. Mybatis JPA-集成方案+源码

    2018-04-18 update 当前文章已过时,请访问代码仓库查看当前版本wiki. github https://github.com/cnsvili/mybatis-jpa gitee htt ...

  5. 六、EnterpriseFrameWork框架基础功能之权限管理

    回<[开源]EnterpriseFrameWork框架系列文章索引> 从本章开始进入框架的第二块内容“EnterpriseFrameWork框架的基础功能”,包括:权限管理.字典数据管理. ...

  6. 如何使用phpredis连接Redis的方法

    本文跟大家介绍使用同一VPC内弹性云服务器ECS上的phpredis连接Redis的方法. 更多的客户端的使用方法,请参考https://redis.io/clients 前提条件 已成功申请Redi ...

  7. 如何在DCS管理控制台将两个Redis主备实例建立全球灾备。

    华为云分布式缓存服务DCS,具有强大的功能,现在小编教大家如何在DCS管理控制台将两个Redis主备实例建立全球灾备. 建立全球灾备,会对主实例和备实例进行升级,实例进程会重启,连接会中断.同时备实例 ...

  8. 【python 3.6】python读取json数据存入MySQL(一)

    整体思路: 1,读取json文件 2,将数据格式化为dict,取出key,创建数据库表头 3,取出dict的value,组装成sql语句,循环执行 4,执行SQL语句 #python 3.6 # -* ...

  9. DevOps之六 shell以及pipeline 命令部署

    一 使用shell命启动spring boot 项目 1. 使用shell停止当前项目 #!/bin/sh main() { clear pid=`ps -ef|grep xx.jar|grep -v ...

  10. Python常用模块之VideoCapture

    官方网址:http://videocapture.sourceforge.net/   功能介绍: VideoCapture是Win32版Python的一个扩展,可以访问视频采集设备(如USB摄像头) ...