使用oVal进行Java Bean 验证的注意事项

5 篇文章 0 订阅
  1. 如果需要不同条件验证不同的属性的时候,需要使用profiles属性,每个校验注解符中都有。注意:oVal默认是启用所有的profiles,所以在对单独一个profile进行启用的时候,需要先disableAllProfiles
  2. 当使用除了@NotNull之外的校验符时,需使用@NotNull先校验,否则其他校验符不起作用。譬如当使用@ValidateWithMethod校验符的时候,需要先使用@NotNull进行校验
  3. 全部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();
    }


}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值