开发者

SpringBoot中利用@Valid和@Validated进行参数校验

开发者 https://www.devze.com 2024-09-02 10:24 出处:网络 作者: 一只小白()
目录一、什么是参数校验二、@Valid和@Validated注解的异同标注位置分组校验嵌套校验三、常用校验注解四、如何使用1、普通参数校验2、对象参数校验3、集合参数校验4、嵌套校验一、什么是参数校验
目录
  • 一、什么是参数校验
  • 二、@Valid和@Validated注解的异同
    • 标注位置
    • 分组校验
    • 嵌套校验
  • 三、常用校验注解
    • 四、如何使用
      • 1、普通参数校验
      • 2、对象参数校验
      • 3、集合参数校验
      • 4、嵌套校验

    一、什么是参数校验

    例如在某个登录请求中传递参数包含用户信息,需要判断用户信息是否为空,以及判断邮箱是否为空等情况,正常处理会写大量的If else 语句非常影响美观,可读性也非常低,因此提出了参数校验这个概念,也就是下文介绍的@Valid和@Validated注解

    @Controller
    @RequestMapping("/user")
    public class UserControlelr {
        @PostMapping("/login")
        public String login(UserDTO userDTO){
            if (userDTO.getUsername() == null || userDTO.getUsername().isEmpty()){
                // 进行某种操作
            }
            if(userDTO.getEmail() == null || userDTO.getEmail().isEmpty()){
                // 进行某种操作
            }
            return "loginSuccess";
        }
    }
    

    二、@Valid和@Validated注解的异同

    标注位置

    • @Validated : 用在类、方法和方法参数上,但不能用于成员属性。
    • @Valid:可以用在方法、构造函数、方法参数和成员属性上。

    分组校验

    • @Validated :支持分组验证,可以更细致地控制验证过程。
    • @Valid:主要支持标准的Bean验证功能,不支持分组验证。

    嵌套校验

    • @Validated :不支持嵌套验证。
    • @Valid:支持嵌套验证,可以嵌套验证对象内部的属性。

    三、常用校验注解

    注解校验作用
    @NotBlank用在String 上面,一般用来校验String类型不能为空,而且调用trim()后,长度必须大于0。
    @NotEmpty用在集合上面,一般用来校验List类型(不能注释枚举),而且长度必须大于0
    @NotNull验证字段不为 null。一般用于数字类型。
    @Min(value)限制必须为一个不小于指定值的数字
    @Max(value)限制必须为一个不大于指定值的数字
    @past限制元素(日期类型)必须是一个过去的日期
    @Future限制元素(日期类型)必须是一个将来的日期
    @Email限制的元素值为是电子邮件地址
    @Patern(valuwww.devze.come)限制必须符合指定的正则表达式

    四、如何使用

    1、普通参数校验

    即直接检验像String、Interger这些普通参数

    注意,要在controller上加入@Validated注解才能生效

    @RestController
    @Validated
    public class Test1Controller {
    
        @PostMapping("/test1")
        public String test1(@NotEmpty String username, @Max(5) Integer value){
            return "校验普通参数";
        }
    
    

    在Apifox上测试,会显示错误信息

    SpringBoot中利用@Valid和@Validated进行参数校验

    2、对象参数校验

    UserDTO.Java

    @Data
    public class UserDTO {
        /**
         * 用户名
         */
        @NotBlank
        private String username;
    
        /**
         * 密码
       www.devze.com  */
        @NotBlank
        private String pasword;
    
        /**
         * 邮箱
         */
        @Email
        private String email;
    }
    

    在参数的DTO上加入@Valid和@Validated效果是一样的

    @RestController
    public class Test2Controller {
        @PostMapping("/test2")
        public String test2(@Valid @RequestBody UserDTO userDTO){
            return "对象参数验证";
        }
    }
    

    在Apifox上测试,会显示错误信息

    SpringBoot中利用@Valid和@Validated进行参数校验

    3、集合参数校验

    注意,要在controller上加入@Validated注解才能生效

    @phpRestController
    @Validated
    public class Test3Controller {
        @PostMapping("/test3")
        public String test3(@Valid @RequestBody List<UserDTO> userDTOList){
            ret编程客栈urn "集合参数校验";
        }
    }
    

    在Apifox上测试,会显示具体第几个变量的哪几个参http://www.devze.com数有错误

    SpringBoot中利用@Valid和@Validated进行参数校验

    4、嵌套校验

    UserListDTO.java

    @Data
    public class UserListDTO {
        /**
         * List的name
         */
        @NotBlank
        private String listName;
    
        /**
         *  User列表
         */
        @Valid
        private List<UserDTO> userDTOList;
    }
    
    @RestController
    public class Test4Controller {
        @PostMapping("/test4")
        public String test4(@Validated @RequestBody UserListDTO userListDTO){
            return "嵌套参数校验";
        }
    }
    

    在Apifox上测试,会显示具体第几个变量的哪几个参数有错误

    SpringBoot中利用@Valid和@Validated进行参数校验

    以上就是SpringBoot中利用@Valid和@Validated进行参数校验的详细内容,更多关于SpringBoot @Valid和@Validated参数校验的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号