zoukankan      html  css  js  c++  java
  • Java web服务端参数校验Javax.validation (springboot)

    一、基本使用

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

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

    1、 被校验参数

    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 }

    2、Controller

     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 }

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

     

    二、所有原生可用的注解

     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会被当作有效处理;

    三、自定义校验注解

    1、定义注解

    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()这三个方法必需要定义,其他的就可以自己增加了;

    2、定义校验方法;

     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 }
  • 相关阅读:
    springboot自动装配mybatisplus时,凭啥MybatisPlusAutoConfiguration比MybatisAutoConfiguration先装配
    mybatis 整合 spring 时,mapper 是怎么被设置必要的参数的
    canvas 画的线无法清除的问题
    大学英语单词 第二单元
    快乐纪中(二)2
    jzoj 2644. 数列
    jzoj【NOIP2011模拟10.31】T1游戏
    快乐纪中
    树形DP
    炮兵阵地
  • 原文地址:https://www.cnblogs.com/aland-1415/p/11788901.html
Copyright © 2011-2022 走看看