Java参数验证@Validated

就以登录接口为例,如果用户传参的时候没有传递帐号或者密码,会报错,但是报错的信息不够全面,前端人员不好判断是什么问题,这个时候就需要对参数进行一个校验

引入依赖

XML 复制代码
<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.2.3.Final</version>
    <scope>compile</scope>
</dependency>
注解 说明
@Null 限制只能为null
@NotNull 限制必须不为nul(可以为null字符串)
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),只应用于字符串且在比较时会去除字符串的空格(不能为null字符串)
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

传参时加入@Validated

如果没传用户名,将不会执行打印

自定义返回错误信息

这个时候只有后端能看见错误信息,前端依然看不到

添加一个全局异常处理器(来自于springboot)

java 复制代码
@RestControllerAdvice // https://blog.csdn.net/user2025/article/details/105458842
public class GlobalExceptionHandler {
    /**
     * 自定义验证异常
     */
    @ExceptionHandler(BindException.class)
    public AjaxResult handleBindException(BindException e) {
        String message = e.getAllErrors().get(0).getDefaultMessage();
        return AjaxResult.success(message, null);
    }
}

捕捉上面错误信息,返回给前端(监听器)

可以捕捉多种异常的信息

这个时候就可以展示给前端

当以上注解无法满足需求,可以用正则表达式

比如验证电话号码

java 复制代码
 @Pattern(regexp = "^1[3-9]\\d{9}", message = "手机号码格式有误")
    private String phone;
相关推荐
ZengLiangYi3 分钟前
多格式文件解析:JSONL / SQLite / Event Stream
前端·javascript·后端
weixin_4684668510 分钟前
Markitdown 文档解析快速入门指南
开发语言·python·自动化·编程
边界条件╝10 分钟前
微前端进阶(一)
前端
ZC跨境爬虫11 分钟前
跟着 MDN 学CSS day_34:(CSS 布局全面解析)
前端·css·ui·html·tensorflow
我命由我1234511 分钟前
SEO 与 GEO 极简理解
java·linux·运维·开发语言·学习·算法·运维开发
万少11 分钟前
湖南卫视的秘密武器曝光!芒果灵创,专业AI影视创作平台
前端·javascript·后端
边界条件╝12 分钟前
微前端进阶(三)
前端
我材不敲代码12 分钟前
Python基础:注释的写法(单行、多行、文档注释)
服务器·python·microsoft
海鸥-w13 分钟前
前端学python 第一课安装python环境及开发工具下载安装
python
金銀銅鐵13 分钟前
[Java] 自己写程序,来解析方法的 descriptor
java·后端