如果需要不同条件验证不同的属性的时候,需要使用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. CF543E Listening to Music

    题面 空间只有$64\text{MB}$!!! 题解 (据说正解是毒瘤分块套分块) 按照权值从大到小排序,对所有能够覆盖到它的区间的左端点打个标记 按照值域建一棵主席树就可以了 区间查询最大值,用$m ...

  2. 第七篇 Postman+Node.js+Newman+Jenkins实现自动化测试

    今天终于不咋忙了,学习整理一下一直想做却没实现的事儿,这事已经折磨团队半年之久了.因为项目是B端业务的测试,测试过程中需要生产大量的测试数据,而且都是跨多个系统的测试,对于后置流程的测试,这些同学往往 ...

  3. Linux命令之tar命令

    [root@linux ~]# tar [-cxtzjvfpPN] 文件与目录 .... 参数: -c :建立一个压缩文件的参数指令(create 的意思): -x :解开一个压缩文件的参数指令! - ...

  4. 深度学习论文笔记:Deep Residual Networks with Dynamically Weighted Wavelet Coefficients for Fault Diagnosis of Planetary Gearboxes

    这篇文章将深度学习算法应用于机械故障诊断,采用了“小波包分解+深度残差网络(ResNet)”的思路,将机械振动信号按照故障类型进行分类. 文章的核心创新点:复杂旋转机械系统的振动信号包含着很多不同频率 ...

  5. curl常用用法

    -v显示请求详细信息 curl www.baidu.com -v -X 指定请求方式 GET请求 curl -X GET http://localhost:8080/search?data=123 # ...

  6. FPGA的过去,现在和未来

    我们知道,相对于专业的ASIC,FPGA有上市时间和成本上的优势.另外,在大多数情况下,FPGA执行某些功能较之CPU上的软件操作更高效.这就是为什么我们认为它不但会运用在数据中心的服务器.交换器.存 ...

  7. Oracle数据库拼音首字母模糊搜索

    1.建立函数 CREATE OR REPLACE FUNCTION F_PINYIN(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS V_COMPARE ); V_RET ...

  8. Alpha发布_文案+美工

    团队名称:探路者 1蔺依铭:http://www.cnblogs.com/linym762/ 2张恩聚:http://www.cnblogs.com/zej87/ 3米赫:http://www.cnb ...

  9. 【探路者】团队Alpha周贡献分数分配结果

    经本组成员商议,根据老师提供的分数,(每人携带10分进入团队,[探路者]团队7人,共计35分). 本周每位同学携带10分进入组内,7人共计70分.分数公布如下: 吴雨丹 15分 贾雅杰 12分 蔺依铭 ...

  10. 04慕课网《vue.js2.5入门》——Vue-cli开发todolist

    主要文件目录: 文件代码: 根实例,初始化vue: <!--index.html,网站入口页面,和main.jsp组成一套.vue文件,包含--> <!DOCTYPE html> ...