Hibernate validator使用和自定义validator及整合Spring MVC
http://blog.csdn.net/lwphk/article/details/43983669
Hibernate validator使用
导入validation-api-xxx.jar 以及 hibernate-validator-xxx.Final.jar
- import javax.validation.constraints.Max;
- import org.hibernate.validator.constraints.Length;
- public class Entity {
- @Max(value=3)//最大值为3
- private int age;
- @Length(max=1) //字符串长度最大为1,hibernate 扩展的
- private String name;
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
值校验的测试类
- import java.util.Set;
- import javax.validation.ConstraintViolation;
- import javax.validation.Validation;
- import javax.validation.Validator;
- import javax.validation.ValidatorFactory;
- public class Tv {
- public static void main(String[] args) {
- ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
- Validator validator = factory.getValidator();
- Entity entity = new Entity();
- entity.setAge(12);
- entity.setName("admin");
- Set<ConstraintViolation<Entity>> constraintViolations = validator.validate(entity);
- for (ConstraintViolation<Entity> constraintViolation : constraintViolations) {
- System.out.println("对象属性:"+constraintViolation.getPropertyPath());
- System.out.println("国际化key:"+constraintViolation.getMessageTemplate());
- System.out.println("错误信息:"+constraintViolation.getMessage());
- }
- }
- }
输出结果
这里有一个国际化的key值,国际化文件在org.hibernate.validator下面的一系列的properites文件里面,如果需要自定义那么可以拷贝出来放在src目录下
- @Length(max=1,message="{maxlength}") //{maxlength}对应配置文件中的key. 必须有{}
- private String name;
再次运行结果如下
自定义validator
首先自定义一个注解CannotContainSpaces (不能包含空格)
- import java.lang.annotation.Documented;
- import java.lang.annotation.Retention;
- import java.lang.annotation.Target;
- import javax.validation.Constraint;
- import javax.validation.Payload;
- @Constraint(validatedBy = CannotContainSpacesValidator.class) //具体的实现
- @Target( { java.lang.annotation.ElementType.METHOD,
- java.lang.annotation.ElementType.FIELD })
- @Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
- @Documented
- public @interface CannotContainSpaces {
- String message() default "{Cannot.contain.Spaces}"; //提示信息,可以写死,可以填写国际化的key
- int length() default 5;
- //下面这两个属性必须添加
- Class<?>[] groups() default {};
- Class<? extends Payload>[] payload() default {};
- }
具体实现类CannotContainSpacesValidator.java
- import javax.validation.ConstraintValidator;
- import javax.validation.ConstraintValidatorContext;
- public class CannotContainSpacesValidator implements ConstraintValidator<CannotContainSpaces, String> {
- private int len;
- /**
- * 初始参数,获取注解中length的值
- */
- @Override
- public void initialize(CannotContainSpaces arg0) {
- this.len = arg0.length();
- }
- @Override
- public boolean isValid(String str, ConstraintValidatorContext constraintValidatorContext) {
- if(str != null){
- if(str.indexOf(" ") < 0){
- return true;
- }
- }else{
- constraintValidatorContext.disableDefaultConstraintViolation();//禁用默认的message的值
- //重新添加错误提示语句
- constraintValidatorContext
- .buildConstraintViolationWithTemplate("字符串不能为空").addConstraintViolation();
- }
- return false;
- }
- }
使用的时候直接注解到对象的属性上面就可以了
- @CannotContainSpaces
- private String name;
测试当name包含空格的时候 entity.setName("xx xx");
整合Spring MVC
- <!-- 国际化配置 -->
- <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:messages/messages</value>
- <value>classpath:messages/Validation</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>
在Spring MVC 控制器中方法属性如下
- /**
- * 这里的@Valid必须书写, bindingResult参数也必须书写在后面,否则验证不通过就会返回400
- * @param entity
- * @param result
- * @return
- */
- @RequestMapping(value="/valid")
- public String validator(@Valid Entity entity,BindingResult result){
- if(result.hasErrors()){
- //如果严重没有通过,跳转提示
- return "error";
- }else{
- //继续业务逻辑
- }
- return "success";
- }
error.jsp中如下
- <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
- <!-- commandName 控制器参数中对象名称 -->
- <form:form commandName="entity">
- <!-- 显示全部错误信息用* -->
- <form:errors path="*"/>
- </form:form>
- <hr/>
- <!-- 对象名称.属性名称 如果该对象的指定属性没有通过校验那么显示错误信息(根据当前语言显示不同国家的文字) -->
- <form:errors path="entity.name"/>
校验注解说明
- 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=) 被注释的元素必须在合适的范围内
注意
- org.springframework.validation.beanvalidation.LocalValidatorFactoryBean
这个的是会报错,
Hibernate validator使用和自定义validator及整合Spring MVC的更多相关文章
- 【深度分析】:阿里,腾讯面试题 SpringBoot整合Spring MVC
Java学习总结 SpringBoot整合Spring MVC 1.SpringMVC概述 MVC(Model–view–controller)是软件工程中的一种软件架构模式,基于此模式把软件系统分为 ...
- MyBatis整合Spring MVC
前面几篇文章已经讲到了mybatis与spring 的集成.目前主流的Web MVC框架,除了Struts这个主力外,还有Spring MVC,主要是由于 Spring MVC 配置比较简单,使用起来 ...
- MyBatis整合Spring MVC(易百教程)
MyBatis是ibatis的升级版,作为hibernate的老对手,它是一个可以自定义SQL.存储过程和高级映射的持久层框架.与Hibernate 的主要区别就是 Mybatis 是半自动化的,而 ...
- spring 整合 spring mvc
需要进行 Spring 整合 SpringMVC 吗 ? 还是否需要再加入 Spring 的 IOC 容器 ? 是否需要再 web.xml 文件中配置启动 Spring IOC 容器的 Context ...
- UEditor1.4.3.3整合Spring MVC和七牛
[前言] 项目中涉及将UEditor上传服务器整合进已有的基于Spring MVC的服务中,并且将上传到本地改为上传到七牛,看似简单的一个需求,实际做起来还是遇到了一些困难.在这里分享一下经验-- 七 ...
- patchca整合Spring MVC生成超炫的验证码
转载:http://lavasoft.blog.51cto.com/62575/1406947 @Controller public class Login2Controller { priv ...
- Intellij IDEA采用Maven+Spring MVC+Hibernate的架构搭建一个java web项目
原文:Java web 项目搭建 Java web 项目搭建 简介 在上一节java web环境搭建中,我们配置了开发java web项目最基本的环境,现在我们将采用Spring MVC+Spring ...
- spring mvc和web-flow的整合方案
发现了一份整合spring MVC 和webflow的很好的资料,日后翻译出来发布.先记着. http://docs.spring.io/spring-webflow/docs/2.3.x/refer ...
- spring MVC 使用 hibernate validator验证框架,国际化配置
spring mvc使用hibernate validator框架可以实现的功能: 1. 注解java bean声明校验规则. 2. 添加message错误信息源实现国际化配置. 3. 结合sprin ...
随机推荐
- 【github&&git】7、gitignore 修改不起作用
在git使用过程中有时会遇到修改了.gitignore文件,修改了之后发现,不能起作用,这是因为git存在缓存问题,所以做一下步骤即可: git rm -r --cached . git add . ...
- GBK与UTF-8的区别
GBK的文字编码是双字节来表示的,即不论中.英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1. 至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节) ...
- 通过jQuery制作电子时钟表的代码
源码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <titl ...
- window的Navigator 对象
Navigator 对象包含有关浏览器的信息. Navigator 对象属性 document.write("浏览器的代码名:" + navigator.appCodeName + ...
- SEO高手和SEO屌丝的八个区
原文:http://www.it28.cn/sousuoyinqing/853085.html SEO这个行业并不规范,有些seo工程师可以拿着高薪,进行一些大型网站的seo工作,其实主要是UEO的工 ...
- Android FileUtils 文件操作类
系统路径 Context.getPackageName(); // 用于获取APP的所在包目录 Context.getPackageCodePath(); //来获得当前应用程序对应的apk文件的路径 ...
- vmare连接远程服务器的问题
测试环境:两端都是VMware Workstation 12 Pro 1.需要共享虚拟机 在虚拟机上点击右键 -> Manage -> Share 后面按照操作设置 2.远程服务器的443 ...
- C# 异步编程4 async与await 异步程序开发
随着C#异步程序开发系列的深入,你会发现编写异步程序越发简单.事物的发展就是这样的规律,从简单到复杂再到简单. 在C# 5.0中我们可以通过async与await关键字实现快捷的异步程序开发,如下: ...
- SpringBoot项目在新电脑上的配置运行,包括JDK+MAVEN+Git+SpringBoot配置等
该教程记录了我在一台新的电脑上安装IDEA,配置JAVA+MAVEN+GIT+SpringBoot项目的过程,最终完成了项目的运行. 一.若想利用IDEA的git工具从GitHub或者码云上面获取项目 ...
- 将 Windows 虚拟机从非托管磁盘转换为托管磁盘
如果有使用非托管磁盘的现有 Windows 虚拟机 (VM),可通过 Azure 托管磁盘服务将 VM 转换为使用托管磁盘. 此过程会同时转换 OS 磁盘和任何附加的数据磁盘. 本文介绍如何使用 Az ...