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

来自:网络
时间:2024-09-10
阅读:

一、什么是参数校验

例如在某个登录请求中传递参数包含用户信息,需要判断用户信息是否为空,以及判断邮箱是否为空等情况,正常处理会写大量的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(value)限制必须符合指定的正则表达式

四、如何使用

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;

    /**
     * 密码
     */
    @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注解才能生效

@RestController
@Validated
public class Test3Controller {
    @PostMapping("/test3")
    public String test3(@Valid @RequestBody List<UserDTO> userDTOList){
        return "集合参数校验";
    }
}

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

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参数校验的资料请关注其它相关文章!

返回顶部
顶部