Spring MVC Hibernate-Validator数据验证实例 图片看不了?点击切换HTTP 返回上层
创建 springMVCDemo09 应用,该应用实现的功能与《Spring MVC验证器应用实例》节中的 springMVCDemo08 应用相同。springMVCDemo09 所需的 JAR 包如图 1 所示。

图 1 springMVCDemo09的JAR包
在 springMVCDemo09 应用中不需要创建验证器类 GoodsValidator。另外,Service 层、View 层以及错误消息属性文件都与 springMVCDemo08 应用的相同。与 springMVCDemo08 应用的实现不同的是模型类、控制器类和 Spring MVC 的核心配置文件,具体如下:
}

图 1 springMVCDemo09的JAR包
在 springMVCDemo09 应用中不需要创建验证器类 GoodsValidator。另外,Service 层、View 层以及错误消息属性文件都与 springMVCDemo08 应用的相同。与 springMVCDemo08 应用的实现不同的是模型类、控制器类和 Spring MVC 的核心配置文件,具体如下:
1)模型类
在模型类 Goods 中利用 JSR 303 的标注类型对属性进行验证,具体代码如下:1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Goods { //goods.gname.required错误消息 key (国际化后对应的就是国际化的信息) @NotBlank(message= "{goods.gname.required}" ) private String gname; @NotBlank(message= "{goods.gdesciption.required}" ) private String gdescription; @Range( min =0, max =100,message= "{gprice.invalid}" ) private double gprice; // 日期格式化(需要在配置文件中配置FormattingConversionServiceFactoryBean) @DateTimeFormat(pattern = "yyyy-MM-dd" ) @Past(message= "{gdate.invalid}" ) private Date gdate; //省略setter和getter方法 |
2)控制器类
在控制器类 GoodsController 中使用 @Valid 对模型对象进行验证,具体代码如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package controller; import javax.annotation.Resource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.Validator; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import pojo.Goods; import service.GoodsService; @Controller @RequestMapping( "/goods" ) public class GoodsController { // 得到一个用来记录日志的对象,这样在打印信息的时候能够标记打印的是哪个类的信息 private static final Log logger = LogFactory.getLog(GoodsController.class); @Autowired private GoodsService goodsService; @RequestMapping( "/input" ) public String input(Model model) { // 如果model中没有goods属性,addGoods.jsp会抛出异常 // 因为表单标签无法找到modelAttribute属性指定的form backing object model.addAttribute( "goods" , new Goods()); return "addGoods" ; } @RequestMapping( "/save" ) public String save(@ModelAttribute Goods goods, BindingResult result,Model model) { if (result.hasErrors()) { return "addGoods" ; } goodsService.save(goods); logger.info( "添加成功" ); model.addAttribute( "goodsList" , goodsService.getGoods()); return "goodsList" ; } } |
3)配置文件
配置文件 springmvc-servlet.xml 的代码如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <?xml version= "1.0" encoding= "UTF-8" ?> <beans xmlns= "http://www.springframework.org/schema/beans" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc= "http://www.springframework.org/schema/mvc" xmlns:p= "http://www.springframework.org/schema/p" xmlns:context= "http://www.springframework.org/schema/context" xsi:schemaLocation= " http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd" > <! -- 使用扫描机制扫描包 --> <context:component-scan base-package= "controller" /> <context:component-scan base-package= "service" /> <! -- 配置消息属性文件 --> <bean id= "messageSource" class= "org.springframework.context.support.ReloadableResourceBundleMessageSource" > <! -- 资源文件名 --> <property name = "basenames" > <list> <value>/WEB-INF/resource/errorMessages</value> </list> </property> <! -- 资源文件编码格式 --> <property name = "fileEncodings" value= "utf-8" /> <! -- 对资源文件内容缓存的时间,单位为秒 --> <property name = "cacheSeconds" value= "120" /> </bean> <! -- 注册校验器 --> <bean id= "validator" class= "org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" > <! -- hibernate 校验器 --> <property name = "providerClass" value= "org.hibernate.validator.HibernateValidator" /> <! -- 指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则默认使用 classpath下的 VaiidationMessages.properties --> <property name = "validationMessageSource" ref= "messageSource" /> </bean> <! --开启 Spring的 Valid 功能 --> <mvc:annotation-driven conversion-service= "conversionService" validator= "validator" /> <! -- 注册格式化转换器,因为用到日期转换 --> <bean id= "conversionService" class= "org.springframework.format.support.FormattingConversionServiceFactoryBean" > </bean> <! -- 配置视图解析器 --> <bean class= "org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name = "prefix" value= "/WEB-INF/jsp/" /> <property name = "suffix" value= ".jsp" /> </bean> </beans> |