validation好用的Java数据校验工具
1.概述Validation 是一种检查机制,用来验证数据的有效性和完整性。其目标是确保数据满足特定的条件或规则,从而防止无效或恶意数据进入系统。
2.使用
环境:spring boot3
2.1 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>3.0.2</version>
</dependency>
2.2 添加注解
首先要在controller上添加 @Validated 开启验证,然后如果是传入的参数验证可以直接在参数前加验证注解;
如果是传入的对象,则必要在对象前加 @Validated,然后在实体类中某个必要验证的字段上添加验证注解;
@Validated
@Tag(name = "用户相关接口")
public class UserController {
public Result updateUser(@RequestBody @Validated User user) {}
public ResponseResult updateUserAvatar(@RequestParam @URL String avatar) {}
} public class User {
@NotEmpty
@Size(max = 10,min = 1)
private String nickname;
private String email;
} 3.分组校验
某个实体类如果参加多个方法的校验,就必要将校验条件分组
@Data
public class Category {
@TableId(value = "id", type = IdType.AUTO)
@NotNull(groups = Update.class)
private Integer id;//主键ID
@NotEmpty(groups = {Update.class,Add.class})
private String categoryName;//分类名称
@NotEmpty
private String categoryAlias;//分类别名
public interface Add extends Default {
}
public interface Update extends Default {
}
}
[*]如果字段不指定分组 ,则归属于默认分组,必要该字段的分组必要继承Default
public Result add(@RequestBody @Validated(Category.Add.class) Category category){}
public Result update(@RequestBody @Validated(Category.Update.class) Category category){} 4.自定义验证注解
有的时间提供的注解满足不了验证需求,我们可以自己自定义注解
举例:
import com.luobei.validation.StateValication;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
/**
* @author : luobei
* @date : 2024/5/17 15:58
*/
@Documented //在生成文档时包含这个注解
@Constraint(validatedBy = {StateValication.class})//指定提供校验规则的类
@Target({ElementType.FIELD}) //定义注解的应用目标,这里注解针对类的属性
@Retention(RetentionPolicy.RUNTIME) //注解会在运行时可用
public @interface State {
//校验失败的后的信息
String message() default "state参数的值只能是已发布或者草稿";
//指定分组
Class<?>[] groups() default {};
//负载
Class<? extends Payload>[] payload() default {};
} 定义验证规则:
import com.luobei.annotation.State;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
/**
* @author : luobei
* @date : 2024/5/17 16:48
* @return: 返回false校验不通过,反之亦然
*/
public class StateValication implements ConstraintValidator<State,String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
//提供校验规则
if(value == null){
return false;
}
if(value.equals("已发布")||value.equals("草稿")){
return true;
}
return false;
}
} 5.验证注解汇总
@URL:验证是否为有效的url
@Null:验证对象是否为 null
@NotNull:验证对象是否不为 null
@AssertTrue:验证 Boolean 字段的值是否为 true
@AssertFalse:验证 Boolean 字段的值是否为 false
@Min(value):验证数值是否大于即是指定的最小值
@Max(value):验证数值是否小于即是指定的最大值
@DecimalMin(value):验证数值是否大于即是指定的最小值(字符串形式的值)
@DecimalMax(value):验证数值是否小于即是指定的最大值(字符串形式的值)
@Size(min, max):验证元素的巨细是否在指定范围内(可以应用于字符串、聚集、数组等)
@Digits(integer, fraction):验证数值的整数位和小数位的位数
@Past:验证日期是否在过去
@PastOrPresent:验证日期是否在过去或如今
@Future:验证日期是否在将来
@FutureOrPresent:验证日期是否在将来或如今
@Pattern(regex):验证字符串是否符合指定的正则表达式
@Email:验证字符串是否是有效的电子邮件地址
@NotEmpty:验证字符串、聚集、地图或数组是否不为空(长度不为 0)
@NotBlank:验证字符串是否不为 null 且去除空格后的长度大于 0
@Positive:验证数值是否为正数
@PositiveOrZero:验证数值是否为正数或 0
@Negative:验证数值是否为负数
@NegativeOrZero:验证数值是否为负数或 0
@CreditCardNumber:验证字符串是否是有效的名誉卡号
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]