详解SpringMVC学习系列(6) 之 数据验证
发布时间 - 2026-01-10 21:59:33 点击率:次在系列(4)、(5)中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 —> 数据验证。

这里我们采用Hibernate-validator来进行验证,Hibernate-validator实现了JSR-303验证框架支持注解风格的验证。首先我们要到http://hibernate.org/validator/下载需要的jar包,这里以4.3.1.Final作为演示,解压后把hibernate-validator-4.3.1.Final.jar、jboss-logging-3.1.0.jar、validation-api-1.0.0.GA.jar这三个包添加到项目中。
配置之前项目中的springservlet-config.xml文件,如下:
<!-- 默认的注解映射的支持 -->
<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>
其中<property name="basename" value="classpath:validatemessages"/>中的classpath:validatemessages为注解验证消息所在的文件,需要我们在resources文件夹下添加。
在com.demo.web.controllers包中添加一个ValidateController.java内容如下:
package com.demo.web.controllers;
import java.security.NoSuchAlgorithmException;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.demo.web.models.ValidateModel;
@Controller
@RequestMapping(value = "/validate")
public class ValidateController {
@RequestMapping(value="/test", method = {RequestMethod.GET})
public String test(Model model){
if(!model.containsAttribute("contentModel")){
model.addAttribute("contentModel", new ValidateModel());
}
return "validatetest";
}
@RequestMapping(value="/test", method = {RequestMethod.POST})
public String test(Model model, @Valid @ModelAttribute("contentModel") ValidateModel validateModel, BindingResult result) throws NoSuchAlgorithmException{
//如果有验证错误 返回到form页面
if(result.hasErrors())
return test(model);
return "validatesuccess";
}
}
其中@Valid @ModelAttribute("contentModel") ValidateModel validateModel的@Valid 意思是在把数据绑定到@ModelAttribute("contentModel") 后就进行验证。
在com.demo.web.models包中添加一个ValidateModel.java内容如下:
package com.demo.web.models;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;
public class ValidateModel{
@NotEmpty(message="{name.not.empty}")
private String name;
@Range(min=0, max=150,message="{age.not.inrange}")
private String age;
@NotEmpty(message="{email.not.empty}")
@Email(message="{email.not.correct}")
private String email;
public void setName(String name){
this.name=name;
}
public void setAge(String age){
this.age=age;
}
public void setEmail(String email){
this.email=email;
}
public String getName(){
return this.name;
}
public String getAge(){
return this.age;
}
public String getEmail(){
return this.email;
}
}
在注解验证消息所在的文件即validatemessages.properties文件中添加以下内容:
name.not.empty=\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\u3002 age.not.inrange=\u5E74\u9F84\u8D85\u51FA\u8303\u56F4\u3002 email.not.correct=\u90AE\u7BB1\u5730\u5740\u4E0D\u6B63\u786E\u3002 email.not.empty=\u7535\u5B50\u90AE\u4EF6\u4E0D\u80FD\u60DF\u6050\u3002
其中name.not.empty等分别对应了ValidateModel.java文件中message=”xxx”中的xxx名称,后面的内容是在输入中文是自动转换的ASCII编码,当然你也可以直接把xxx写成提示内容,而不用另建一个validatemessages.properties文件再添加,但这是不正确的做法,因为这样硬编码的话就没有办法进行国际化了。
在views文件夹中添加validatetest.jsp和validatesuccess.jsp两个视图,内容分别如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form:form modelAttribute="contentModel" method="post">
<form:errors path="*"></form:errors><br/><br/>
name:<form:input path="name" /><br/>
<form:errors path="name"></form:errors><br/>
age:<form:input path="age" /><br/>
<form:errors path="age"></form:errors><br/>
email:<form:input path="email" /><br/>
<form:errors path="email"></form:errors><br/>
<input type="submit" value="Submit" />
</form:form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> 验证成功! </body> </html>
其中特别要指出的是validatetest.jsp视图中<form:form modelAttribute="contentModel" method="post">的modelAttribute="xxx"后面的名称xxx必须与对应的@Valid @ModelAttribute("xxx") 中的xxx名称一致,否则模型数据和错误信息都绑定不到。
<form:errors path="name"></form:errors>即会显示模型对应属性的错误信息,当path="*"时则显示模型全部属性的错误信息。
运行测试:
直接点击提交:
可以看到正确显示了设置的错误信息。
填写错误数据提交:
可以看到依然正确显示了设置的错误信息。
填写正确数据提交:
可以看到验证成功。
下面是主要的验证注解及说明:
数据验证的内容到此结束,代码下载:demo
更多信息请参考官方文档:http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html/validator-usingvalidator.html
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# spring
# mvc4
# 数据验证
# mvc
# SpringMVC使用@Valid注解进行数据验证的方法
# ASP.NET MVC 数据验证及相关内容
# MVC数据验证详解
# 错误信息
# 绑定
# 可以看到
# 是在
# 的是
# 包中
# 这是
# 你也
# 这就是
# 可以直接
# 更多信息
# 没有办法
# 要到
# 到此
# 这三个
# 不正确
# 请参考
# 大家多多
# 直接点击
# 再添
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
如何在自有机房高效搭建专业网站?
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
利用vue写todolist单页应用
Laravel如何使用Telescope进行调试?(安装和使用教程)
网站建设保证美观性,需要考虑的几点问题!
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何快速登录WAP自助建站平台?
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
详解Oracle修改字段类型方法总结
iOS中将个别页面强制横屏其他页面竖屏
如何登录建站主机?访问步骤全解析
网站制作软件免费下载安装,有哪些免费下载的软件网站?
如何快速搭建FTP站点实现文件共享?
什么是javascript作用域_全局和局部作用域有什么区别?
三星网站视频制作教程下载,三星w23网页如何全屏?
详解jQuery中的事件
iOS正则表达式验证手机号、邮箱、身份证号等
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
大学网站设计制作软件有哪些,如何将网站制作成自己app?
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
微信小程序制作网站有哪些,微信小程序需要做网站吗?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
MySQL查询结果复制到新表的方法(更新、插入)
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
JS弹性运动实现方法分析
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
Laravel如何处理和验证JSON类型的数据库字段
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
香港服务器部署网站为何提示未备案?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
简历没回改:利用AI润色让你的文字更专业
如何获取PHP WAP自助建站系统源码?
如何在IIS7上新建站点并设置安全权限?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
做企业网站制作流程,企业网站制作基本流程有哪些?
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
Laravel怎么上传文件_Laravel图片上传及存储配置
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】

