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

1、基本使用

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

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

一、 被校验参数spring

1 public class User {
2 private Long id; 3 @NotBlank(message = "用户名不能为空") 4 private String name; 5 @NotBlank(message = "手机号不能为空") 6 private String phone; 7 @NotNull(message = "年龄不能为空") 8 private Integer age; 9 }

二、Controllerspringboot

 1 @RestController
 2 public class TestController {
 3 
 4     @RequestMapping("/create")
 5     public String createUser(@Valid User user, BindingResult bindingResult){
 6         if (bindingResult.hasErrors()){
 7             return bindingResult.getFieldError().getDefaultMessage();
 8         }
 9         return  "success";
10     }
11 }

三、启动服务,而后在本地请求,若是请求参数不对,便可看到咱们给出的错误信息app

 

 

 

 2、全部原生可用的注解

 1 @NotBlank            元素不能为null,且不能全是空格,用于校验字符串;
 2 @NotEmpty            元素不能为null,且不能为空,用于校验集合类型数据;
 3 @NotNull             元素不能为null,全部类型的数据均可以校验;
 4 @Null                元素必须为null, 全部类型的数据均可以校验;
 5 @Size(min = 1, max = 5)    元素长度介于给定值以前(包含边界),用于校验集合类型数据(包含字符串),;
 6 @Future               元素为时间,且是未来的时间;
 7 @FutureOrPresent          元素为时间,且是如今或未来的时间;
 8 @Past               元素为时间,且是已通过去的时间;
 9 @PastOrPresent          元素为时间,且是如今或已通过去的时间;
10 @Max(value = 2)         元素值不大于给定值value,可校验全部Number类型数据(除了double和float);;
11 @Min(value = 1)         元素值不小于给定值value,可校验全部Number类型数据(除了double和float);;
12 @Negative           元素值为负数,可校验全部Number类型数据;;
13 @NegativeOrZero         元素值为负数或0,可校验全部Number类型数据;;
14 @Positive          元素值为正数,可校验全部Number类型数据;;
15 @PositiveOrZero        元素值为正数或0,可校验全部Number类型数据;;
16 @DecimalMax(inclusive = true, value = "3.2")   元素值不大于给定值value, inclusive默认是true,可不填,可校验全部Number类型数据(除了double和float);
17 @DecimalMin(inclusive = false, value = "23")   元素值大于给定值value, inclusive默认是true,可不填,可校验全部Number类型数据(除了double和float);
18 @Digits(integer = 5, fraction = 7)          元素为数字,且最大长度不超过7位,整数部分最高位不超过5位;
19 @AssertFalse               元素的值必须为false,用于校验布尔类型元素;
20 @AssertTrue                元素的值必须为true,用于校验布尔类型元素;
21 @Email                邮箱名格式校验

注:除了前4个外,其余全部的null会被看成有效处理;

3、自定义校验注解

一、定义注解ide

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

注意定义时message(),groups(),payload()这三个方法必须要定义,其余的就能够本身增长了;spa

二、定义校验方法;code

 1 public class NameValidator implements ConstraintValidator<NameA, String> {
 2 
 3     private String reg = "[a,]\\w+";
 4     private Pattern pattern = Pattern.compile(reg);
 5 
 6     @Override
 7     public void initialize(NameA name){
 8 
 9     }
10 
11     @Override
12     public boolean isValid(String name, ConstraintValidatorContext context){
13         if (name == null){
14             return  false;
15         }
16         return pattern.matcher(name).matches();
17     }
18 }
相关文章
相关标签/搜索