使用oVal进行Java Bean 验证的注意事项
Posted koal的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用oVal进行Java Bean 验证的注意事项相关的知识,希望对你有一定的参考价值。
如果需要不同条件验证不同的属性的时候,需要使用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 验证的注意事项的主要内容,如果未能解决你的问题,请参考以下文章
protobuf 生成的 Java 对象上的级联 bean 验证不起作用