SpringMVC 数据校验方法(必看篇)
发布时间 - 2026-01-11 01:35:22 点击率:次数据校验在web应用里是非常重要的功能,尤其是在表单输入中。在这里采用Hibernate-Vapdator进行校验,该方法实现了JSR-303验证框架支持注解风格的验证。

一、导入jar包
若要实现数据校验功能,需要导入必要的jar包,主要包括以下几个:
classmate-1.3.1.jar
hibernate-vapdator-5.4.1.Final.jar
hibernate-vapdator-annotation-processor-5.4.1.Final.jar
hibernate-vapdator-cdi-5.4.1.Final.jar
jboss-logging-3.3.0.Final.jar
vapdation-api-1.1.0.Final.jar
二、常用的校验注解
| 注解 | 功能 |
|---|---|
| @Null | 验证对象是否为 null |
| @NotNull | 验证对象是否不为 null |
| @AssertTrue | 验证 Boolean 对象是否为 true |
| @AssertTrue | 验证 Boolean 对象是否为 false |
| @Max(value) | 验证 Number 和 String 对象是否小于等于指定值 |
| @Min(value) | 验证 Number 和 String 对象是否大于等于指定值 |
| @DecimalMax(value) | 验证注解的元素值小于等于 @DecimalMax 指定的 value 值 |
| @DecimalMin(value) | 验证注解的元素值大于等于 @DecimalMin 指定的 value 值 |
| @Digits(integer,fraction) | 验证字符串是否符合指定格式的数字,integer 指定整数精度,fraction 指定小数精度 |
| @Size(min,max) | 验证对象长度是否在给定的范围内 |
| @Past | 验证 Date 和 Calendar 对象是否在当前时间之前 |
| @Future | 验证 Date 和 Calendar 对象是否在当前时间之后 |
| @Pattern | 验证 String 对象是否符合正则表达式的规则 |
| @NotBlank | 检查字符串是不是 Null,被 Trim 的长度是否大于0,只对字符串,且会去掉前后空格 |
| @URL | 验证是否是合法的 url |
| 验证是否是合法的邮箱 | |
| @CreditCardNumber | 验证是否是合法的信用卡号 |
| @Length(min,max) | 验证字符串的长度必须在指定范围内 |
| @NotEmpty | 检查元素是否为 Null 或 Empty |
| @Range(min,max,message) | 验证属性值必须在合适的范围内 |
三、修改实体类
在类的属性上进行标注,如:
public class User {
@NotBlank(message = "Username can not be empty")
private String username;
@NotBlank(message = "password can not be blank")
@Length(min = 6, max = 16, message = "The length of the password must be between 6 and 16 bits")
private String password;
@Range(min = 18, max = 60, message = "Age must be between 18 and 60 years old")
private Integer age;
@Pattern(regexp = "^1[3|4|5|7|8][0-9]{9}$", message = "Please enter the correct format of the phone number")
private String phone;
@Email(message = "Please enter a valid email address")
private String email;
// other...
}
四、修改相应的处理方法
@RequestMapping(value = "/register")
public String register(@Valid @ModelAttribute("user") User user, Errors errors,Model model) {
if(errors.hasErrors()){
return "register";
}
model.addAttribute("user", user);
return "success";
}
五、视图输出
校验之后,我们通常需要在表单的输入框后进行文字反馈:
<form:form modelAttribute="user" method="post" action="register">
<fieldset>
<legend>register</legend>
<p>
<label>name:</label>
<form:input path="username" />
<form:errors path="username" cssStyle="color:red"/>
</p>
...
</fieldset>
</form:form>
然而,有些时候并不推荐直接将错误信息写在注解的message属性里,这样不方便国际化。因此可以做以下几处修改:
1. 新建validatemessages.properties
username.not.blank = "username cannot be empty..." password.not.blank = "password cannot be empty" password.not.length = "password should be in 6-10" age.not.range = "age should be in 10-70" phone.not.pattern = "phone should be in format" email.not.format = "email should be in format"
2. 实体类中的注解使用相对引用
public class User {
@NotBlank(message = "{username.not.blank}")
private String username;
@NotBlank(message = "{password.not.blank}")
@Length(min = 6, max = 10, message = "{password.not.length}")
private String password;
@Range(min = 10, max = 70, message = "{age.not.range}")
private Integer age;
@Pattern(regexp = "^1[3|4|5|7|8][0-9]{9}$", message = "{phone.not.pattern}")
private String phone;
@Email(message = "{email.not.format}")
private String email;
// other...
}
3. 修改配置文件
<!-- 默认的注解映射的支持 -->
<mvc:annotation-driven validator="validator" conversion-service="conversion-service" />
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<!--不设置则默认为classpath下的 ValidationMessages.properties -->
<property name="validationMessageSource" ref="validatemessageSource"/>
</bean>
<bean id="conversion-service" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
<bean id="validatemessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:validatemessages"/>
<property name="fileEncodings" value="utf-8"/>
<property name="cacheSeconds" value="120"/>
</bean>
特别注意:value="classpath:validatemessages",文件名不加后缀!
至此,数据校验的整个过程就结束了。
最后还要特别强调的重点是:
视图中<form:form modelAttribute="contentModel" method="post">的modelAttribute="xxx"后面的名称xxx必须与对应的@Valid @ModelAttribute("xxx") 中的xxx名称一致,否则模型数据和错误信息都绑定不到。
<form:errors path="name"></form:errors>即会显示模型对应属性的错误信息,当path="*"时则显示模型全部属性的错误信息。
以上这篇SpringMVC 数据校验方法(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# SpringMVC
# 数据校验
# java开发之基于Validator接口的SpringMVC数据校验方式
# springMVC如何对输入数据校验实现代码
# SpringMVC 数据校验实例解析
# springmvc的validator数据校验的实现示例代码
# springmvc使用JSR-303进行数据校验实例
# SpringMVC数据校验+VO++脱敏实战指南
# 错误信息
# 给大家
# 表单
# 是否符合
# 几个
# 是在
# 在这里
# 希望能
# 不为
# 非常重要
# 这篇
# 必看
# 不加
# 写在
# 主要包括
# 只对
# 若要
# 卡号
# 绑定
# 小编
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
轻松掌握MySQL函数中的last_insert_id()
如何构建满足综合性能需求的优质建站方案?
如何在阿里云虚拟服务器快速搭建网站?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
如何用搬瓦工VPS快速搭建个人网站?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
如何在云主机上快速搭建网站?
北京的网站制作公司有哪些,哪个视频网站最好?
简单实现Android验证码
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
网站建设要注意的标准 促进网站用户好感度!
javascript中对象的定义、使用以及对象和原型链操作小结
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
用yum安装MySQLdb模块的步骤方法
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
高防服务器租用首荐平台,企业级优惠套餐快速部署
如何快速上传自定义模板至建站之星?
如何在IIS中配置站点IP、端口及主机头?
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
大连 网站制作,大连天途有线官网?
Android中AutoCompleteTextView自动提示
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
微信小程序 五星评分(包括半颗星评分)实例代码
香港服务器如何优化才能显著提升网站加载速度?
HTML 中如何正确使用模板变量为元素的 name 属性赋值
中山网站推广排名,中山信息港登录入口?
Laravel怎么在Controller之外的地方验证数据
如何在腾讯云服务器上快速搭建个人网站?
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
Python正则表达式进阶教程_复杂匹配与分组替换解析
Swift中switch语句区间和元组模式匹配
EditPlus中的正则表达式实战(5)
再谈Python中的字符串与字符编码(推荐)
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
免费视频制作网站,更新又快又好的免费电影网站?
html5的keygen标签为什么废弃_替代方案说明【解答】
原生JS实现图片轮播切换效果

