当前位置: 代码网 > it编程>编程语言>Java > SpringBoot中利用@Valid和@Validated进行参数校验

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

2024年09月02日 Java 我要评论
一、什么是参数校验例如在某个登录请求中传递参数包含用户信息,需要判断用户信息是否为空,以及判断邮箱是否为空等情况,正常处理会写大量的if else 语句非常影响美观,可读性也非常低,因此提出了参数校验

一、什么是参数校验

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

在这里插入图片描述

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com