博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring MVC 使用 hibernate validator验证框架,国际化配置
阅读量:4708 次
发布时间:2019-06-10

本文共 4377 字,大约阅读时间需要 14 分钟。

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

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

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

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

优势:

代码简洁。

实现:

1. 使用hibernate validator 至少要引入两个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   6  10  26  27  84         
85
86
88
89
91
92
94
95
97
98
100
101
106 107

其中需要注意的地方:

  • 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     
6
7 13
14
15
16
20
21
248
49
50
51
/WEB-INF/hibernate_validator_messages/hibernate_validator_message_zh_CN
52
53
54
55
56
UTF-8
57
58
59
60
61
62
63

 

配置中需要注意的地方:

  • 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 
2 3
22
36
37 45
49 50
57
58
59
60
64
65
66 67
70
72
73
74
75
76
77 92
93
94
95
/WEB-INF/hibernate_validator_messages/hibernate_validator_message_zh_CN
96
97
98
99
100
UTF-8
101
102
103
104
105
106
107
108 109

配置中需要注意的地方:

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

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

转载于:https://www.cnblogs.com/exmyth/p/8692200.html

你可能感兴趣的文章
软件工程设计之四则运算
查看>>
SpringMVC @ResponseBody 406
查看>>
Partial Tree UVALive - 7190(完全背包)
查看>>
Ubuntu安装搜狗拼音教程
查看>>
Happy Number
查看>>
Sqlserver 系统视图简单说明
查看>>
vue中ESlint报错
查看>>
NetCore2.0 RozarPage自动生成增删改查
查看>>
0816 1459 json & pickle ,目录导入,目录规范
查看>>
Servlet 生命周期
查看>>
HDU 1398
查看>>
如何恢复oracle中已删除的表
查看>>
双向BFS(转)
查看>>
【最短路】Dijkstra+ 链式前向星+ 堆优化(优先队列)
查看>>
linux下实现keepalived+nginx高可用
查看>>
Html Agility Pack解析Html(C#爬虫利器)
查看>>
GridView中的CheckBox选中 (JQuery)
查看>>
webform(四)简单控件
查看>>
验证码
查看>>
敏捷开发入门教程
查看>>