@Valid注解怎么规范使用
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍"@Valid注解怎么规范使用"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"@Valid注解怎么规范使用"文章能帮助大家解决问题。@Valid
千家信息网最后更新 2025年11月07日@Valid注解怎么规范使用
这篇文章主要介绍"@Valid注解怎么规范使用"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"@Valid注解怎么规范使用"文章能帮助大家解决问题。
@Valid注解大全及用法规范
| 注解 | 描述 |
| @AssertFalse | 带注解的元素必须为false,支持boolean/Boolean |
| @AssertTrue | 带注解的元素必须为true,支持boolean/Boolean |
| @DecimalMax | 带注解的元素必须是一个数字,其值必须小于等于指定的最大值 |
| @DecimalMin | 带注解的元素必须是一个数字,其值必须大于等于指定的最小值 |
| @Digits | 带注解的元素必须是一个可接受范围内的数字 |
| @Future | 带注解的元素必须是将来的某个时刻、日期或时间 |
| @Max | 带注解的元素必须是一个数字,其值必须小于等于指定的最大值 |
| @Min | 带注解的元素必须是一个数字,其值必须大于等于指定的最小值 |
| @NotNull | 带注解的元素不能是Null |
| @Null | 带注解的元素必须是Null |
| @Past | 带注解的元素必须是过去的某个时刻、日期或时间 |
| @Pattern | 带注解的元素必须符合指定的正则表达式 |
| @Size | 带注解的元素必须大于等于指定的最小值,小于等于指定的最大值 |
| 带注解的元素必须是格式良好的电子邮箱地址 | |
| @NotEmpty | 带注解的元素不能是空,String类型不能为null,Array、Map不能为空,切size/length大于0 |
| @NotBlank | 字符串不能为空、空字符串、全空格 |
| @URL | 字符串必须是一个URL |
@Valid注解规范用户请求的参数
业务场景
对于一个用户的注册操作(Post请求),往往涉及到账号(username)、密码(password)的Post提交:
//用户发送POST请求创建新的用户@PostMappingpublic User create(@RequestBody User user){ /** 一些数据持久化操作,如:写入数据库 **/ //打印用户提交的信息 System.out.println(user.getId()); System.out.println(user.getUsername()); System.out.println(user.getPassword()); System.out.println(user.getBirthday()); return user;}业务出现的问题
但用户往往会不小心提交了空的密码来注册,这是不允许的,因此我们往往需要对用户提交的密码信息进行空判断,常见的方法是直接进行if语句的空判断:
//用户发送POST请求创建新的用户@PostMappingpublic User create(@RequestBody User user){ if( StringUtils.isBlank(user.getPassword())){ //用户输入密码为空,进行异常处理 } /** 一些数据持久化操作,如:写入数据库 **/ //打印用户提交的信息 System.out.println(user.getId()); System.out.println(user.getUsername()); System.out.println(user.getPassword()); System.out.println(user.getBirthday()); return user;}以上方法看似行得通,但一旦Post的方法变多,则需要对每个Post请求都进行一次if判断是否为空,代码变得冗余,而且一旦修改一个地方,所有if语句都需要修改,可维护性就变得很差。
优化的解决方案
那么,有没有一种方法可以一劳永逸、既没有大量代码冗余,可维护性又好呢?这时 javax.validation包下的@Valid注解就派上用场了。
1.首先,我们在实体类User.java中的密码(password)属性加上@NotBlank注解(hibernate.validator.constraints包)
import org.hibernate.validator.constraints.NotBlank;public class User { public interface UserSimpleView{} public interface UserDetailView extends UserSimpleView{} private String username; //给该属性加入NotBlank非空的约束 @NotBlank private String password; private String id; private Date birthday; public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } @JsonView(UserSimpleView.class) public String getId() { return id; } public void setId(String id) { this.id = id; } @JsonView(UserSimpleView.class) public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @JsonView(UserDetailView.class) public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}2.我们在Controller类的Post方法的参数中加入@Valid注解,并使用BindingResult将错误信息作为日志打印到后台
@PostMappingpublic User create(@Valid @RequestBody User user, BindingResult errors){ if (errors.hasErrors()){ //异常处理 errors.getAllErrors().stream().forEach(error -> System.out.println(error.getDefaultMessage())); } user.setId("1"); System.out.println(user.getId()); System.out.println(user.getUsername()); System.out.println(user.getPassword()); System.out.println(user.getBirthday()); return user;}3.这时,当我们向服务器Post提交空的密码信息时,后台会打印出错误信息:
may not be empty
关于"@Valid注解怎么规范使用"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
注解
元素
用户
密码
方法
信息
数字
数据
最大
最小
最大值
知识
业务
代码
冗余
参数
可维护性
后台
字符
字符串
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
分布式数据库半连接优点
崇明区口碑好的软件开发服务费
软件开发中级职称有什么
哪个数据库管理软件比较好
甘谷县委网络安全委员会
数据库显示员工编号
oppo存在同名数据库
云服务器和服务器有什么区别
双扣棋牌游戏软件开发培训班
网络安全员需要什么学历
安康民宿软件开发
网络安全志愿报考
aws服务器怎么管理
数据库管理员有年龄限制吗
徐州专业联想服务器安装
浩瀚网络技术
数据库产品作用
网络安全与执法学哪些内容
服务器安全性与品牌
解放军网络安全学院
如何搭建hbase数据库
数据库id依赖关系
软件开发前景怎么样啊
龙口南山网络技术服务
汉杰科技网络安全风险诊断
软件开发者哪里看
文件传输服务器是什么意思
sno在数据库中为什么
汽车网络安全法规标准
解放军网络安全学院