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;
相关推荐
波诺波2 分钟前
最小 SOFA XML 场景结构 0-base.scn
xml·java·前端
李少兄2 分钟前
深入理解 Web 服务器、Servlet 容器与现代 Java Web 架构
java·服务器·servlet
weixin_399380697 分钟前
Tongweb7049m10适配skywalking(by lqw)
java·skywalking
写了20年代码的老程序员9 分钟前
企业微信、飞书、钉钉 Webhook 接入,后端代码为什么总是越写越丑
java·微信
小林ixn9 分钟前
从 List 切片到 LLM 调用:一篇搞定 Python 基础与 AI 接口
python·ai编程
用户7138742290010 分钟前
浏览器安全机制与现代 SPA 认证架构深度解析
前端
Momo__10 分钟前
Node Modules Inspector:Vue 团队出品的依赖分析神器
前端·vue.js·npm
kisshyshy11 分钟前
从零搭建全栈应用:模块化思想 + 语义化HTML + JSON‑Server快速Mock
前端
解决问题no解决代码问题12 分钟前
设计模式分类介绍
java·开发语言·设计模式
yamsfeer13 分钟前
电商自动化支付全链路技术拆解:从Playwright到扫码支付的底层原理
前端