在springmvc中使用hibernate-validate
在springmvc.xml中加入
- <!-- 国际化配置 -->
- <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
- <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
- <property name="basenames">
- <list>
- <value>classpath:resource/ValidationMessages</value>
- </list>
- </property>
- <property name="useCodeAsDefaultMessage" value="true" />
- </bean>
- <!-- 注册验证器 -->
- <mvc:annotation-driven validator="validator" />
- <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
- <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
- <!-- 这里配置将使用上面国际化配置的messageSource -->
- <property name="validationMessageSource" ref="messageSource" />
- </bean>
资源文件(可以省略不写,这样错误信息就直接写中文即可)
- val.age.message=\u5E74\u9F84\u4E0D\u80FD\u8D85\u8FC720\u5C81
- username.not.null=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A
- pwd.not.null=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A
- username.length=\u7528\u6237\u540D\u6700\u5927\u4E0D\u80FD\u8D85\u8FC7{max},\u6700\u5C0F\u4E0D\u80FD\u5C11\u4E8E{min}
- email.format.error=\u90AE\u7BB1\u683C\u5F0F\u4E0D\u6B63\u786E
被验证的bean:
- package com.lee.web.entity;
- import javax.validation.constraints.Max;
- import javax.validation.constraints.Pattern;
- import org.hibernate.validator.constraints.Email;
- import org.hibernate.validator.constraints.Length;
- import org.hibernate.validator.constraints.NotBlank;
- public class ValBean {
- /**
- * Bean Validation 中内置的 constraint
- * @Null 被注释的元素必须为 null
- * @NotNull 被注释的元素必须不为 null
- * @AssertTrue 被注释的元素必须为 true
- * @AssertFalse 被注释的元素必须为 false
- * @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
- * @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
- * @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
- * @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
- * @Size(max=, min=) 被注释的元素的大小必须在指定的范围内
- * @Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
- * @Past 被注释的元素必须是一个过去的日期
- * @Future 被注释的元素必须是一个将来的日期
- * @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
- * Hibernate Validator 附加的 constraint
- * @NotBlank(message =) 验证字符串非null,且长度必须大于0
- * @Email 被注释的元素必须是电子邮箱地址
- * @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
- * @NotEmpty 被注释的字符串的必须非空
- * @Range(min=,max=,message=) 被注释的元素必须在合适的范围内
- */
- private Long id;
- @Max(value=20, message="{val.age.message}")
- private Integer age;
- @NotBlank(message="{username.not.null}")
- @Length(max=6, min=3, message="{username.length}")
- private String username;
- @NotBlank(message="{pwd.not.null}")
- @Pattern(regexp="/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,10}$/", message="密码必须是6~10位数字和字母的组合")
- private String password;
- @Pattern(regexp="^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$", message="手机号格式不正确")
- private String phone;
- @Email(message="{email.format.error}")
- private String email;
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this.id = id;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getPhone() {
- return phone;
- }
- public void setPhone(String phone) {
- this.phone = phone;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- }
controller,json form或者作为rest接口,都行
- @RequestMapping(value = "/val", method=RequestMethod.POST)
- @ResponseBody
- public LeeJSONResult val(@Valid @RequestBody ValBean bean, BindingResult result) throws Exception {
- if(result.hasErrors()){
- //如果没有通过,跳转提示
- Map<String, String> map = getErrors(result);
- return LeeJSONResult.error(map);
- }else{
- //继续业务逻辑
- }
- return LeeJSONResult.ok();
- }
- private Map<String, String> getErrors(BindingResult result) {
- Map<String, String> map = new HashMap<String, String>();
- List<FieldError> list = result.getFieldErrors();
- for (FieldError error : list) {
- System.out.println("error.getField():" + error.getField());
- System.out.println("error.getDefaultMessage():" + error.getDefaultMessage());
- map.put(error.getField(), error.getDefaultMessage());
- }
- return map;
- }
在springmvc中使用hibernate-validate的更多相关文章
- 使用hibernate validate做参数校验
1.为什么使用hibernate validate 在开发http接口的时候,参数校验是必须有的一个环节,当参数校验较少的时候,一般是直接按照校验条件做校验,校验不通过,返回错误信息.比如以下校验 ...
- SpringMvc中的数据校验
SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...
- Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案
最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https: ...
- SpringMVC中使用Interceptor拦截器
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]
目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...
- SpringMVC+spring-security+sitemesh+hibernate+freemarker整合-转
http://www.oschina.net/code/snippet_170632_46774 代码分享 当前位置: 代码分享 » Java » Web编程 搜 索 SpringMVC+spr ...
- SpringMvc中Interceptor拦截器用法
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆等. 一. 使用场景 1 ...
- SpringMVC 中的Interceptor 拦截器
1.配置拦截器 在springMVC.xml配置文件增加: <mvc:interceptors> <!-- 日志拦截器 --> <mvc:interceptor> ...
- SpringMVC中的异步提交表单
1.前言 近期在做一个项目,前台框架用的是EasyUI+SpringMVC,因为对SpringMVC不太了解,所以刚開始接触的时候有点吃力,在此通过一个EasyUi中的DataGrid表格来总结一下. ...
- 关于springMVC中component-scan的问题以及springmvc.xml整理
关于springMVC中component-scan的问题以及springmvc.xml整理 一.component-scan问题和解决办法 最近在学习使用springMVC+myba ...
随机推荐
- Linux命令详解之–cd命令
cd命令是linux实际使用当中另一个非常重要的命令,本文就为大家介绍下Linux中cd命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux cd命令用于切换当前工作目录至 d ...
- 基于UML项目的分析与设计
1,概述 项目中需求和设计的文档是必然的,UML工具可以帮助指导我们从不同的角度去看待一个新的系统,并把这个系统分解剖析出来.本篇文章主要讲述的是如何将UML应用到项目的开发工作中,关于如何学习UML ...
- 【python】获取高德地图省市区县列表
项目中需要用省市区来进行检索,原想高德地图肯定会有API来获得这些数据,结果没有找到,有一个接口好像可以用,但是会附带大量的边界坐标点. 所以就不如自己把高德的省市区列表扒下来,自己写接口来完成这个功 ...
- express新旧语法对比
备个份, 原文: http://stackoverflow.com/questions/25550819/error-most-middleware-like-bodyparser-is-no-lon ...
- 微信html5开发选哪一个
html5选哪个开发框架 ①. Justep起步 X5框架 : 专门用来开发web App的大型开发工具集,x5 v3.0有765.58M,不选. ②.Jquery Mobile ...
- 谷歌的网页排序算法(PageRank Algorithm)
本文将介绍谷歌的网页排序算法(PageRank Algorithm),以及它如何从250亿份网页中捞到与你的搜索条件匹配的结果.它的匹配效果如此之好,以至于“谷歌”(google)今天已经成为一个被广 ...
- IOS 网络浅析-(十三 SDWebImage 实用技巧)
IOS 网络浅析-(十三 SDWebImage 实用技巧) 首先让我描述一下为了什么而产生的实用技巧.(在TableView.CollectionView中)当用户所处环境WiFi网速不够快(不能立即 ...
- iOS:自己写的一个星级评价的小Demo
重新整理了下自己星级评价的Demo,可以展示星级评价,可以动态修改星级. github的地址:https://github.com/hunterCold/HYBStarEvaluationView a ...
- iOS之 APP异常捕获反馈给服务器
在我们开发的app中, 不可避免的, 有时候用户使用软件会崩溃. 我们就需要捕获异常, 可以在入口类中加入相应的代码, 可以在每次用户打开程序的时候, 检查一下沙盒中是否有崩溃日志, 如果有, 可以 ...
- iOS之通过PaintCode快速实现交互动画的最方便方法 未解问题
需求: 问题: 源码百度云下载链接: http://pan.baidu.com/s/1o7r4hCm 密码: 8atd 其他学习链接:http://www.jianshu.com/p/90d6cd35 ...