spring mvc使用hibernate validator框架可以实现的功能:

1. 注解java bean声明校验规则。

2. 添加message错误信息源实现国际化配置。

3. 结合spring form中的errors标签展现错误信息。

优势:

代码简洁。

实现:

1. 使用hibernate validator 至少要引入两个jar包:

  hibernate-validator-5.3.4.Final.jar , validation-api-1.1.0.Final.jar

2. JSR规范定义的注解在validation-api下javax.validation.constraints包下,请自行查看。

3. java bean中使用注解添加检验规则

 1 public class UserInfo {
2
3 @Size(min = 8,max = 20,message="{username.size}")
4 @Pattern(regexp="[_a-zA-Z0-9]+",message="{username.pattern}")
5 private String username;
6
7 public String getUsername() {
8 return username;
9 }
10 public void setUsername(String username) {
11 this.username = username;
12 }
13 }

Controller的配置

 1 @Controller 
3 public class UserController {
5 @GetMapping(value = "/register")
6 public String showRegister(Model model){
7 model.addAttribute("user",new UserInfo());
8 return "register";
9 }
10
11 @PostMapping(value = "/register")
12 public String register(@ModelAttribute("user") @Valid UserInfo user, Errors errors) {
13 if (errors.hasErrors()) {
14 return "register";
15 }
16 return "redirect:/index";
17 }
25 }

对应的register.jsp文件:

  1 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
3 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
4 <%@taglib uri="http://www.springframework.org/tags/form" prefix="sf"%>
5 <html>
6 <head>
10 <title></title>
26 </head>
27 <body>
84 <sf:form method="POST" commandName="user">
85 <sf:input path="username"/>
86 <sf:errors path="username"/><br>
88 <sf:password path="password"/>
89 <sf:errors path="password"/><br>
91 <sf:password path="re_password"/>
92 <sf:errors path="re_password" /><br>
94 <sf:input path="email" type="email"/>
95 <sf:errors path="email" /><br>
97 <sf:input path="phone"/>
98 <sf:errors path="phone" /><br>
100 <input type="submit" value="注册">
101 </sf:form>
106 </body>
107 </html>

其中需要注意的地方:

  • form标签如果不声明action属性,则默认提交到当前请求路径。
  • @Valid注解指定校验的对象,@ModelAttribute("user")注解声明模型对象,value需要与commandName属性的值一致,不然出错的话<sf:errors>标签找不到对应的对象;

如果不声明模型对象名称,那么默认是userInfo(即类名第一个首字母小写).

  • Errors对象存储错误信息,需要紧跟在@Valid注解的对象之后。
  • get方式访问/register,显示rigister.jsp,并提供一个对象给jsp, 属性的key与表单中的commandName属性的值对应,jsp将表单数据存入对象中。

post提交表单,如果有错误信息,返回rigister.jsp,spring的输入标签会填入之前输入的对象数据,即user.username的值,并且<sf:errors>标签会从Errors对象中获取user.username错误信息(即message指定的信息),将<sf:errors>标签渲染为<span>标签(有兴趣的话可以研究一下标签库的源码)。

4.spring-dispatcher-servlet.xml配置hibernate validator,并且配置国际化资源

 1     <mvc:annotation-driven validator="validator"/>
6 <mvc:default-servlet-handler />
7
13 <bean id="requestHandler" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
14 <property name="useSuffixPatternMatch" value="false"/><!--关闭自动使用 .* 后缀-->
15 </bean>
16 <bean id="requestAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
20 <property name="synchronizeOnSession" value="true"/>
21 </bean>
2
48 <bean id="hibernate_validator_messages" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
49 <property name="basenames">
50 <list>
51 <value>/WEB-INF/hibernate_validator_messages/hibernate_validator_message_zh_CN</value>
52 </list>
53 </property>
54 <property name="fileEncodings">
55 <props>
56 <prop key="/WEB-INF/hibernate_validator_messages/hibernate_validator_message_zh_CN">UTF-8</prop>
57 </props>
58 </property>
59 </bean>
60 <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
61 <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
62 <property name="validationMessageSource" ref="hibernate_validator_messages"/>
63 </bean>

配置中需要注意的地方:

  • LocalValidatorFactoryBean :validationMessageSource通过set方法注入,然后转换为MessageInterpolator对象,如果不配置validationMessageSource
    信息源,那么会使用默认的信息源HibernateValidations_xx_xx.properties,位于org.hibernate.validator包下,具体使用哪个文件由Locale.getDefaultLocale()决定。
  • ReloadableResourceBundleMessageSource :spring中提供的信息源配置类,支持proerties和xml文件,更改配置无需重启服务,basenames指定文件位置和名称(可使用classpath前缀),fileEncodings指定各个文件的编码方式,spring中首先查找.properties后缀文件,找不到再查找.xml后缀文件。

5.spring-dispatcher-servlet.xml完整配置如下:

  1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <beans xmlns="http://www.springframework.org/schema/beans"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xmlns:context="http://www.springframework.org/schema/context"
6 xmlns:mvc="http://www.springframework.org/schema/mvc"
7 xsi:schemaLocation="
8 http://www.springframework.org/schema/beans
9 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
10 http://www.springframework.org/schema/context
11 http://www.springframework.org/schema/context/spring-context-4.3.xsd
12 http://www.springframework.org/schema/mvc
13 http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
14 ">
22 <context:component-scan base-package="sps.controller"/>
36 <context:annotation-config/>
37
45 <mvc:annotation-driven validator="validator"/>
49
50 <mvc:default-servlet-handler />
57 <bean id="requestHandler" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
58 <property name="useSuffixPatternMatch" value="false"/><!--关闭自动使用 .* 后缀-->
59 </bean>
60 <bean id="requestAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
64 <property name="synchronizeOnSession" value="true"/>
65 </bean>
66
67 <!--
68 配置DispatcherServlet的视图解析器
69 -->
70 <bean id="internalresolver"
71 class="org.springframework.web.servlet.view.InternalResourceViewResolver">
72 <property name="prefix" value="/WEB-INF/views/"/>
73 <property name="suffix" value=".jsp"/>
74 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
75 <property name="exposeContextBeansAsAttributes" value="true"/>
76 </bean>
77
92 <bean id="hibernate_validator_messages" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
93 <property name="basenames">
94 <list>
95 <value>/WEB-INF/hibernate_validator_messages/hibernate_validator_message_zh_CN</value>
96 </list>
97 </property>
98 <property name="fileEncodings">
99 <props>
100 <prop key="/WEB-INF/hibernate_validator_messages/hibernate_validator_message_zh_CN">UTF-8</prop>
101 </props>
102 </property>
103 </bean>
104 <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
105 <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
106 <property name="validationMessageSource" ref="hibernate_validator_messages"/>
107 </bean>
108
109 </beans>

配置中需要注意的地方:

  • InternalResourceViewResolver 中的 viewClass 配置为JstlView,如果使用spring 标签库的话必须 声明为 JstlView,不然spring标签库可能不起作用,甚至引起错误。

6.web.xml 中配置servlet就不罗嗦了。

spring MVC 使用 hibernate validator验证框架,国际化配置的更多相关文章

  1. Hibernate Validator验证框架中@NotEmpty、@NotBlank、@NotNull 的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull的主要使用情况 @NotEmpty  用在集合类上面 @NotBlank   用在String上 ...

  2. spring boot 使用hibernate validator 验证service

    不在controller中验证,而是在service中验证. spring boot 默认使用的就是hibernate validator,存在于pom的spring-boot-starter-web ...

  3. hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull 的区别 Hibernate Validator验证框架中@NotEmpty.@NotBlank ...

  4. Spring MVC(十四)--SpringMVC验证表单

    在Spring MVC中提供了验证器可以进行服务端校验,所有的验证都必须先注册校验器,不过校验器也是Spring MVC自动加载的,在使用Spring MVC校验器之前首先要下载相关的jar包,下面是 ...

  5. Spring,Spring MVC,MyBatis,Hibernate总结

    将之前学习的框架知识进行了UML图总结,若有错误或不当之处,劳烦朋友们指正,会及时作出修改和补充: [toc] Spring Spring MVC MyBatis,Hibernate

  6. Validator验证框架

    Validator验证框架 系统分析 在设计Validator验证框架时,需要明确以下问题. (1)当用户没有输入数据时,弹出英文提示信息. (2)当用户输入的数据长度大于系统设置的数据长度,弹出英文 ...

  7. Spring Boot 整合Hibernate Validator

    Spring Boot 整合Hibernate Validator 依赖 <dependencies> <dependency> <groupId>org.spri ...

  8. spring mvc: 可参数化的视图控制器(在配置中指定jsp文件)MultiActionController/SimpleUrlHandlerMapping/ParameterizableViewController

    spring mvc: 可参数化的视图控制器(在配置中指定jsp文件)MultiActionController/SimpleUrlHandlerMapping/ParameterizableView ...

  9. spring 项目中使用 hibernate validator验证输入参数

    1 hibernate validator 官方文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_si ...

随机推荐

  1. WebForm 【发送邮件】

    C#实现简单的SmtpClient发送邮件 分析 需要什么 发送邮件     --       发送内容         --      接收邮件 流程(各功能都适用) 创建对象    --     ...

  2. ASP.NET Web API 启用跨域访问

    自定义特性 要在WebApi中实现JSONP,一种方式是实现自定义特性  http://stackoverflow.com/questions/9421312/jsonp-with-asp-net-w ...

  3. 【Java并发编程】6、volatile关键字解析&内存模型&并发编程中三概念

    volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以 ...

  4. Perl爬虫的简单实现

    由于工作中有个项目需要爬取第三方网站的内容,所以在Linux下使用Perl写了个简单的爬虫. 相关工具 1. HttpWatch/浏览器开发人员工具 一般情况下这个工具是用不到的,但是如果你发现要爬取 ...

  5. 列表与for循环

    一.list列表 1.概述 变量:使用变量存储数据,但是,有一个缺点:一个变量每次只能存储一个数据 #需求:存储5个人的年龄,求他们的平均年龄 age1 = 29 age2 = 36 age3 = 3 ...

  6. IIS7下,显示PHP错误(不显示500错误,而显示详细错误)

    玛德,IIS就是个坑,害得老子进行摸索了那么久,才找到了解决方法: 1.除了将php.ini配置为: display_errors = on; error_reporting = E_ALL & ...

  7. 用CSS控制DIV居中失效的解决方法

    1.一般情况下DIV居中失效是因为没写DTD语句 在页面的最上方加上: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...

  8. ES6学习之关键字

    前言:什么是ES6?ECMAScript 6(简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.其中相比较于ES5新增了诸多的特性,并且ES6可转换为ES5的语法.- ...

  9. python爬虫入门---第四篇:网站对爬虫的限制及突破测试

    大部分网站对网络爬虫都有限制,限制方式有两种: 一.Robots协议:二.网站通过判断对网站访问http的头部信息来查看是否是爬虫,并对爬虫做相关拦截 第一种限制是书面限制,第二种是强制性阻拦限制.那 ...

  10. mysql之Navicat工具、pymysql模块

    1. IDE工具介绍(Navicat) 为了方便测试,使用IDE工具,就是Navicat,这个工具本质上就是一个socket客户端,可视化的连接mysql服务端的一个工具,并且是图形界面版的.它和直接 ...