JAVA-参数验证 Validation分组校验&自定义校验

有时候同一个请求对象会在多个场景的接口中使用,不同业务场景对请求对象的参数校验需求不同,可以使用分组校验来解决.

public class User implements Serializable {

    // 添加2个空接口,用例标记参数校验规则
    /**
     * 注册校验规则
     */
    public interface UserRegisterValidView {
    }

    /**
     * 登录校验规则
     */
    public interface UserLoginValidView {
    }

    private static final long serialVersionUID = 1L;

    @NotBlank(message = "用户名不能为空")
    private String userName;

    @NotBlank(message = "密码不能为空")
    private String password;

    // 若填写了groups,则该参数验证只在对应验证规则下启用
    @Past(groups = { UserRegisterValidView.class }, message = "出生日期不符合要求")
    private Date birthday;

    @DecimalMin(value = "0.1", message = "金额最低为0.1")
    @NotNull(message = "金额不能为空")
    private BigDecimal balance;

    @AssertTrue(groups = { UserRegisterValidView.class, UserLoginValidView.class }, message = "标记必须为true")
    private boolean flag;

    @Min(value = 18, message = "年龄不能小于18")
    private Integer age;
}

在Controller中需要在@Validated里加上分组

public ResponseMessage<Object> register(@RequestBody @Validated(User.UserRegisterValidView.class) User user ){
        ResponseMessage<Object> message = new ResponseMessage();
        //do something
        return message;
    }

如果jar包中没有规则校验,自己定义:

实现:

加在对象属性上

下面是Jar包支持的校验

@Min 验证 Number 和 String 对象是否大等于指定的值 @Max 验证 Number 和 String 对象是否小等于指定的值 @DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度 @DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度 @Digits 验证 Number 和 String 的构成是否合法 @Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。 @Valid 递归的对关联对象进行校验, 如果关联对象是个集合或者数组,那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验.(是否进行递归验证) @CreditCardNumber 信用卡验证 @Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。 @ScriptAssert(lang= ,script=, alias=) @URL(protocol=,host=, port=,regexp=, flags=) @Range(min=10000,max=50000,message="range.bean.wage") 被注释的元素必须在合适的范围 @Size(max,min) 被注释的元素大小必须在指定范围内 @Past 被注释的元素必须是一个过去的日期 @Future 被注释的元素必须是一个将来的日期 @Pattern(value) 被注释的元素必须符合指定的正则表达式 @Null 被注释的元素必须为null @NotNull 被注释的元素必须不为null @AssertTrue 被注释元素必须为true @AssertFalse 被注释元素必须为false @Length 被注释的字符串的大小必须在指定的范围内 @NotEmpty 被注释的字符串必须非空
经验分享 程序员 微信小程序 职场和发展