码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-05-18 11:22:45      阅读:338      评论:0      收藏:0      [点我收藏+]

标签:cat   iss   roo   eprof   rod   原因   end   catch   extend   

如果需要不同条件验证不同的属性的时候,需要使用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 验证的注意事项

标签:cat   iss   roo   eprof   rod   原因   end   catch   extend   

原文地址:http://www.cnblogs.com/koal/p/6871742.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!