Java web服务端参数校验Javax.validation (springboot)

2023-05-28,,

一、基本使用

Javax.validation是spring集成自带的一个参数校验接口。可通过添加注解来设置校验条件。

下面以springboot项目为例进行说明。创建web项目后,不需要再添加其他的依赖;

1、 被校验参数

 public class User {
private Long id;
@NotBlank(message = "用户名不能为空")
private String name;
@NotBlank(message = "手机号不能为空")
private String phone;
@NotNull(message = "年龄不能为空")
private Integer age;
}

2、Controller

 @RestController
public class TestController { @RequestMapping("/create")
public String createUser(@Valid User user, BindingResult bindingResult){
if (bindingResult.hasErrors()){
return bindingResult.getFieldError().getDefaultMessage();
}
return "success";
}
}

3、启动服务,然后在本地请求,如果请求参数不对,即可看到我们给出的错误信息

二、所有原生可用的注解

 @NotBlank            元素不能为null,且不能全是空格,用于校验字符串;
@NotEmpty 元素不能为null,且不能为空,用于校验集合类型数据;
@NotNull 元素不能为null,所有类型的数据都可以校验;
@Null 元素必须为null, 所有类型的数据都可以校验;
@Size(min = 1, max = 5) 元素长度介于给定值之前(包含边界),用于校验集合类型数据(包含字符串),;
@Future        元素为时间,且是将来的时间;
@FutureOrPresent   元素为时间,且是现在或将来的时间;
@Past            元素为时间,且是已经过去的时间;
@PastOrPresent      元素为时间,且是现在或已经过去的时间;
@Max(value = 2)      元素值不大于给定值value,可校验所有Number类型数据(除了double和float);;
@Min(value = 1)      元素值不小于给定值value,可校验所有Number类型数据(除了double和float);;
@Negative           元素值为负数,可校验所有Number类型数据;;
@NegativeOrZero      元素值为负数或0,可校验所有Number类型数据;;
@Positive          元素值为正数,可校验所有Number类型数据;;
@PositiveOrZero      元素值为正数或0,可校验所有Number类型数据;;
@DecimalMax(inclusive = true, value = "3.2")   元素值不大于给定值value, inclusive默认是true,可不填,可校验所有Number类型数据(除了double和float);
@DecimalMin(inclusive = false, value = "23")   元素值大于给定值value, inclusive默认是true,可不填,可校验所有Number类型数据(除了double和float);
@Digits(integer = 5, fraction = 7)        元素为数字,且最大长度不超过7位,整数部分最高位不超过5位;
@AssertFalse 元素的值必须为false,用于校验布尔类型元素;
@AssertTrue 元素的值必须为true,用于校验布尔类型元素;
@Email         邮箱名格式校验

注:除了前4个外,其他所有的null会被当作有效处理;

三、自定义校验注解

1、定义注解

 @Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NameValidator.class)
public @interface NameA { String message() default "这个名字不是以a开头";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}

注意定义时message(),groups(),payload()这三个方法必需要定义,其他的就可以自己增加了;

2、定义校验方法;

 public class NameValidator implements ConstraintValidator<NameA, String> {

     private String reg = "[a,]\\w+";
private Pattern pattern = Pattern.compile(reg); @Override
public void initialize(NameA name){ } @Override
public boolean isValid(String name, ConstraintValidatorContext context){
if (name == null){
return false;
}
return pattern.matcher(name).matches();
}
}

Java web服务端参数校验Javax.validation (springboot)的相关教程结束。

《Java web服务端参数校验Javax.validation (springboot).doc》

下载本文的Word格式文档,以方便收藏与打印。