在项目开发中我们经常使用到的注解
2023-09-22 07:11:22
写在前面
在项目开发中,我们经常会遇到需要对用户输入的数据进行校验的情况,例如:
- 注册时,需要校验用户名和密码是否合法。
- 登录时,需要校验用户名和密码是否正确。
- 下订单时,需要校验收货地址和电话号码是否正确。
- ....
如果我们不进行数据校验,很可能会导致程序出现各种各样的问题,例如:
- 用户名或密码不合法,导致注册失败。
- 用户名或密码不正确,导致登录失败。
- 收货地址或电话号码不正确,导致无法发货。
- ....
为了避免这些问题,我们需要对用户输入的数据进行校验。目前,Java 中提供了多种数据校验框架,例如:
- JSR-303 Bean Validation
- Hibernate Validator
- Apache Commons Validator
- ...
其中,JSR-303 Bean Validation 是 Java EE 7 中引入的一个标准,它提供了一套标准的数据校验注解,我们可以直接在 Java Bean 中使用这些注解来校验数据。Hibernate Validator 是 JSR-303 Bean Validation 的一个实现,它提供了更加丰富的校验注解和更强大的校验功能。Apache Commons Validator 是一个轻量级的数据校验框架,它提供了简单易用的校验功能。
在本文中,我们将主要介绍如何使用 JSR-303 Bean Validation 和 Hibernate Validator 来进行数据校验。
JSR-303 Bean Validation
JSR-303 Bean Validation 是一个标准的数据校验框架,它提供了丰富的校验注解,我们可以直接在 Java Bean 中使用这些注解来校验数据。JSR-303 Bean Validation 的校验注解主要分为两类:
- 内置校验注解:JSR-303 Bean Validation 提供了常用的内置校验注解,例如
@NotNull
、@NotEmpty
、@Size
、@Pattern
等。 - 自定义校验注解:如果内置校验注解不能满足我们的需求,我们可以自定义校验注解。
@NotNull
private String name;
@NotEmpty
private String password;
@Size(min = 1, max = 10)
private String address;
@Pattern(regexp = "^[0-9]*@NotNull
private String name;
@NotEmpty
private String password;
@Size(min = 1, max = 10)
private String address;
@Pattern(regexp = "^[0-9]*$")
private String phone;
quot;)
private String phone;
使用 JSR-303 Bean Validation 进行数据校验非常简单,我们只需要在 Java Bean 中使用校验注解来标注需要校验的属性即可。当我们对 Java Bean 进行校验时,校验框架会自动扫描 Java Bean 中的校验注解,并根据校验注解的规则对属性进行校验。如果校验不通过,校验框架会抛出 javax.validation.ConstraintViolationException
异常。
Hibernate Validator
Hibernate Validator 是 JSR-303 Bean Validation 的一个实现,它提供了更加丰富的校验注解和更强大的校验功能。Hibernate Validator 的校验注解主要分为两类:
- 内置校验注解:Hibernate Validator 提供了常用的内置校验注解,例如
@NotNull
、@NotEmpty
、@Size
、@Pattern
等。 - 自定义校验注解:如果内置校验注解不能满足我们的需求,我们可以自定义校验注解。
Hibernate Validator 的自定义校验注解可以通过 @Constraint
注解来实现。@Constraint
注解需要指定两个参数:
- validatedBy:指定校验注解的实现类。
- message:指定校验注解的错误消息。
@Constraint(validatedBy = PhoneValidator.class, message = "手机号码格式不正确")
public @interface Phone {
}
public class PhoneValidator implements ConstraintValidator<Phone, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return value.matches("^1[3-9]\\d{9}public class PhoneValidator implements ConstraintValidator<Phone, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
return value.matches("^1[3-9]\\d{9}$");
}
}
quot;);
}
}
使用 Hibernate Validator 进行数据校验也非常简单,我们只需要在 Java Bean 中使用校验注解来标注需要校验的属性即可。当我们对 Java Bean 进行校验时,校验框架会自动扫描 Java Bean 中的校验注解,并根据校验注解的规则对属性进行校验。如果校验不通过,校验框架会抛出 javax.validation.ConstraintViolationException
异常。
总结
在本文中,我们介绍了如何使用 JSR-303 Bean Validation 和 Hibernate Validator 来进行数据校验。数据校验对于提高代码质量和减少 bug 的产生非常重要。建议大家在项目开发中养成使用数据校验的习惯。