java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot @Valid和@Validated参数校验

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

作者:一只小白()

为了保证数据的正确性、完整性,前后端都需要进行数据检验,作为一名后端开发工程师,不能仅仅依靠前端来校验数据,我们还需要对接口请求的参数进行后端的校验,所以本文给大家介绍了SpringBoot中利用@Valid和@Validated进行参数校验,需要的朋友可以参考下

一、什么是参数校验

例如在某个登录请求中传递参数包含用户信息,需要判断用户信息是否为空,以及判断邮箱是否为空等情况,正常处理会写大量的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注解的异同

标注位置

分组校验

嵌套校验

三、常用校验注解

注解校验作用
@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上测试,会显示错误信息

在这里插入图片描述

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上测试,会显示错误信息

在这里插入图片描述

3、集合参数校验

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

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

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

在这里插入图片描述

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

您可能感兴趣的文章:
阅读全文