约束校验浅析

本文目录

1 Java Bean Validation

2 Hibernate Validator

3 相关Jar包

4 Java校验

5 Spring MVC校验


1 Java Bean Validation

Java Bean Validation (JSR 303)是一个校验框架,属于Java EE 6规范中的一部分。

定义了一些约束接口,可通过注解方式使用这些约束条件。

约束接口

详细信息

@Null

元素必须为 null

@NotNull

元素必须不为 null

@AssertTrue

元素必须为 true

@AssertFalse

元素必须为 false

@Min(value)

元素必须是一个数字,其值必须大于等于指定的最小值 

@Max(value)

元素必须是一个数字,其值必须小于等于指定的最大值 

@DecimalMin(value)

元素必须是一个数字,其值必须大于等于指定的最小值 

@DecimalMax(value)

元素必须是一个数字,其值必须小于等于指定的最大值 

@Size(max, min)

元素的大小必须在指定的范围内

@Digits(integer, fraction)

元素必须是一个数字,其值必须在可接受的范围内

@Past

元素必须是一个过去的日期

@Future

元素必须是一个将来的日期

@Pattern(value)

元素必须符合指定的正则表达式

@Valid

元素中的每一项都进行检查

2 Hibernate Validator

Hibernate Validator实现了Java BeanValidation中所有的约束接口。

同时,额外提供了部分约束接口及实现。

Constraint

详细信息

@NotEmpty

字符串的必须非空,且不能是空字符串

@NotBlank

字符串的必须非空,且不能是空白字符串,即trim()后长度大于0 

@Length

字符串的长度必须在指定的范围内

@Range

元素必须在合适的范围内

@Email

元素必须符合电子邮箱地址格式

@URL

元素必须符合URL格式

3 相关Jar包

validation-api.jar

提供Java Bean Validation中的约束接口(没有具体实现)。

hibernate-validator.jar

提供对Java Bean Validation的具体实现,并提供额外的约束接口及实现。

使用了表达式语言(Expression Language),依赖于javax.el:javax.el-api.jar和org.glassfish.web:javax-el.jar两个包。

注意:

在Spring Boot项目中,tomcat-embed-el集成了el和el实现类,因此,不需要pom.xml添加依赖的el相关包。

但是,要注意由于<dependency>顺序导致的依赖包冲突失效问题。

javax.el : javax.el-api.jar

提供表达式语言抽象类(没有具体实现)。

org.glassfish.web : javax-el.jar

提供了表达式语言的具体实现。(也可以使用其它实现了javax.el的包)

4 Java校验

// 获取校验器
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

// 校验对象
Set<ConstraintViolation<Object>> failSet = validator.validate(obj);

// 校验失败数量
int failCount = failSet.size();

// 遍历处理错误信息
for (ConstraintViolation<Object> cv : set) {
    // 处理逻辑
}

5 Spring MVC校验

从Spring 3开始,Spring MVC就能够自动验证@Controller入参。

仅需添加Hibernate Validator包(或其它实现JSR303的包),即可通过<mvc:annotation-driven>检测到。

从而,让Validator支持所有的Controller。

@RestController
public class DemoController {

    // 若校验不通过,直接抛出异常,不会执行validTest1方法。
    @GetMapping("/valid1")
    public String validTest1(@Valid User user) {
        return "Valid Test.";
    }

    // 若校验不通过,将校验失败信息保存至result对象中,继续执行validTest2方法。
    @GetMapping("/valid2")
    public String validTest2(@Valid User user, BindingResult result) {
        return "Valid Test with BindingResult.";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值