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;
相关推荐
云烟成雨TD9 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
Csvn9 小时前
🌟 LangChain 30 天保姆级教程 · Day 13|OutputParser 进阶!让 AI 输出自动转为结构化对象,并支持自动重试!
python·langchain
于慨9 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
石小石Orz9 小时前
油猴脚本实现生产环境加载本地qiankun子应用
前端·架构
swg3213219 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
从前慢丶9 小时前
前端交互规范(Web 端)
前端
gelald10 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川10 小时前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月10 小时前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
CHU72903510 小时前
便捷约玩,沉浸推理:线上剧本杀APP功能版块设计详解
前端·小程序