`

spring4 hibernate validation

阅读更多
从哪里加载的validator呢

默认就是用下面的这个validator
/**
 * {@link LocalValidatorFactoryBean} subclass that simply turns
 * {@link org.springframework.validation.Validator} calls into no-ops
 * in case of no Bean Validation provider being available.
 *
 * <p>This is the actual class used by Spring's MVC configuration namespace,
 * in case of the {@code javax.validation} API being present but no explicit
 * Validator having been configured.
 *
 * @author Juergen Hoeller
 * @since 4.0.1
 */
public class OptionalValidatorFactoryBean extends LocalValidatorFactoryBean {

	@Override
	public void afterPropertiesSet() {
		try {
			super.afterPropertiesSet();
		}
		catch (ValidationException ex) {
			LogFactory.getLog(getClass()).debug("Failed to set up a Bean Validation provider", ex);
		}
	}

}


是在WebMvcConfigurationSupport中决定的
引用
/**
* Return a global {@link Validator} instance for example for validating
* {@code @ModelAttribute} and {@code @RequestBody} method arguments.
* Delegates to {@link #getValidator()} first and if that returns {@code null}
* checks the classpath for the presence of a JSR-303 implementations
* before creating a {@code OptionalValidatorFactoryBean}.If a JSR-303
* implementation is not available, a no-op {@link Validator} is returned.
*/
@Bean
public Validator mvcValidator() {
Validator validator = getValidator();
if (validator == null) {
if (ClassUtils.isPresent("javax.validation.Validator", getClass().getClassLoader())) {
Class<?> clazz;
try {
String className = "org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean";
clazz = ClassUtils.forName(className, WebMvcConfigurationSupport.class.getClassLoader());
}
catch (ClassNotFoundException ex) {
throw new BeanInitializationException("Could not find default validator class", ex);
}
catch (LinkageError ex) {
throw new BeanInitializationException("Could not load default validator class", ex);
}
validator = (Validator) BeanUtils.instantiate(clazz);
}
else {
validator = new NoOpValidator();
}
}
return validator;
}



这个地方开始进入验证
ModelAttributeMethodProcessor:
1.resolveArgument
{
这个地方有创建binder
WebDataBinder binder = binderFactory.createBinder(webRequest,   attribute, name);

}
this.initializer.initBinder(dataBinder, webRequest);
这句话最重要
/**
	 * Create a new {@link WebDataBinder} for the given target object and
	 * initialize it through a {@link WebBindingInitializer}.
	 * @throws Exception in case of invalid state or arguments
	 */
	@Override
	public final WebDataBinder createBinder(NativeWebRequest webRequest, Object target, String objectName)
			throws Exception {
		WebDataBinder dataBinder = createBinderInstance(target, objectName, webRequest);
		if (this.initializer != null) {
			this.initializer.initBinder(dataBinder, webRequest);
		}
		initBinder(dataBinder, webRequest);
		return dataBinder;
	}
这个地方有初始化
ConfigurableWebBindingInitializer:initBinder

2.validateIfApplicable

DataBinder: validate
DataBinder中含有
private final List<Validator> validators = new ArrayList<Validator>();
真实的验证发生在
SpringValidatorAdapter 中targetValidator的validate
他的实现可以是hibernate中的ValidatorImpl



	public Validator getValidator() {
		ResourceBundleLocator defaultResourceBundleLocator = new PlatformResourceBundleLocator(VALIDATION_FILE_NAME);
		MessageInterpolator defaultMessageInterpolator = new ResourceBundleMessageInterpolator(
				defaultResourceBundleLocator);
		LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();
		bean.setMessageInterpolator(defaultMessageInterpolator);
		bean.setProviderClass(HibernateValidator.class);
		// bean.setValidationMessageSource(messageSource());
		return bean;
	}


上面的可以使用hibernate默认的错误信息
同时包含自定义的错误信息
注意VALIDATION_FILE_NAME不能包含classpath
可以看可以有文件夹





分享到:
评论

相关推荐

    resin 支持spring mvc 5.0以上版本 支持Hibernate validation

    本文将深入探讨Resin如何支持Spring MVC 5.0及以上版本,以及它对Hibernate Validation的支持。 首先,Spring MVC 5.0引入了许多改进和新特性,例如对Java 8的全面支持、更好的类型安全的模型绑定、增强的路径变量...

    Hibernate Validation使用示例及讲解

    在 Spring Boot 应用中,可以直接在控制器方法的参数上使用 Hibernate Validation 注解,Spring MVC 会自动进行验证: ```java @PostMapping("/users") public ResponseEntity createUser(@Valid User user, ...

    springmvc4与hibernate validation校验器完全兼容jar包

    在Spring MVC中集成Hibernate Validation,可以实现对输入数据的有效性检查,从而提升应用程序的健壮性和用户体验。 首先,让我们深入了解一下Spring MVC中的数据绑定和验证。Spring MVC支持模型驱动的数据绑定,它...

    spring3 hibernate3 整合

    Spring3作为其第三个主要版本,引入了更多增强功能和对新特性的支持,如Spring MVC的改进、对JSR-303/JSR-349 Bean Validation的支持以及Spring Security的增强。 Hibernate则是一个对象关系映射(ORM)框架,它...

    整合Spring + hibernate所需的jar包

    4. spring-orm:提供与各种ORM框架(如Hibernate)的集成。 5. spring-web:对于Web应用,此模块提供了Servlet API的支持。 Hibernate的jar文件主要包括: 1. hibernate-core:Hibernate的核心库,包含对象关系映射...

    struts2.1+spring2.5+hibernate3.3整合之第一步(spring2.5+hibernate3.3)

    此外,Spring2.5对JSR-303(Bean Validation)的支持,使数据验证变得更加简单。 Hibernate3.3则是一个持久层框架,它简化了数据库操作,通过ORM(Object-Relational Mapping,对象关系映射)技术将Java对象与...

    Struts+Spring+Hibernate整合练习

    4. **整合Spring和Struts**:通过Spring的Struts插件,让Spring管理Struts的Action实例。 5. **整合Spring和Hibernate**:在Spring配置文件中,配置Hibernate的SessionFactory,并创建DAO bean,注入SessionFactory...

    springMVC整合hibernate的校验Validation

    本教程将详细介绍如何在Spring MVC中配置并使用Hibernate Validation进行数据校验。 首先,我们需要引入必要的依赖。在Spring MVC项目中,通常我们会使用Maven或Gradle作为构建工具。对于Hibernate Validator,可以...

    spring注解-validation所用到的jar包

    在Spring框架中,注解和Validation是两个关键的组件,它们极大地简化了应用程序的开发过程。Validation主要用于数据验证,而Spring注解则提供了声明式编程的能力,使得代码更加简洁、可读性更强。这里我们将详细探讨...

    Spring3 Hibernate3 Struts2

    在Spring3中,你可以看到对JSR-303(Bean Validation)和JSR-311(RESTful Web服务)的支持增强,这使得开发更现代的Web应用程序变得更加便捷。 Hibernate3是一个强大的对象关系映射(ORM)框架,它简化了Java应用...

    spring mybaits hibernate jar包

    而Hibernate Validator是Hibernate项目的一部分,它是JSR-303/JSR-349 Bean Validation规范的参考实现,用于校验对象的属性,确保数据的准确性和完整性。 4. **JDBC**: Java Database Connectivity,是Java语言访问...

    springmvc校验器validation的所有配套jar包

    4. **集成Spring MVC**:在Spring MVC中,可以通过配置`LocalValidatorFactoryBean`作为bean来启用Hibernate Validation。此外,还可以使用`@Valid`注解在控制器方法的参数上,自动触发对模型对象的验证。 5. **...

    spring+hibernate+vaildator 校验demo代码

    在IT行业中,Spring、Hibernate和Validator是三个非常重要的框架,它们在Java开发中扮演着核心角色。本示例代码着重展示了如何将这三个组件整合在一起,实现数据校验和持久化功能。 Spring是一个全面的后端应用程序...

    Struts2+Spring3+Hibernate4整合的jar包

    Struts2、Spring3和Hibernate4是Java Web开发中的三大框架,它们的整合极大地提高了开发效率,简化了项目结构,并提供了强大的功能。SSH(Struts2、Spring、Hibernate)是企业级应用开发的常见选择,这主要是因为...

    spring3.0.6+hibernate3.6.10+mysql包

    3.0.6版本的Spring引入了许多改进和新特性,例如支持JSR-303 Bean Validation,增强了对RESTful服务的支持,以及对Java EE 6的全面兼容。 Hibernate是一个对象关系映射(Object-Relational Mapping, ORM)工具,它...

    Spring2.5+Hibernate3.2开发手册

    4. **更多支持**:Spring 2.5 还增强了对JSR-303 Bean Validation、RESTful服务和Java Persistence API(JPA)的支持。 Hibernate 3.2.0 版本则包含以下关键特性: 1. **性能优化**:在3.2版本中,Hibernate 对查询...

    sruts2.1spring3.0hibernate3.3 JAR包

    4. 支持JSR-303/JSR-349 Bean Validation:集成JavaBean验证标准,简化业务逻辑验证。 **Hibernate3.3** Hibernate是一个对象关系映射(ORM)框架,它允许开发者将Java对象与数据库表进行映射,减少了SQL的编写。在...

    spring security3,spring3.0,hibernate3.5,struts2

    Spring 3.0是Spring框架的一个重要版本,它提供了许多改进和新特性,如对JSR-303/JSR-349(Bean Validation)的支持,改进的AOP(面向切面编程)功能,以及对RESTful服务的更好支持。Spring 3.0的改进使得与Spring ...

    struts2.16 spring2.56 hibernate3.2 sqljdbc4 完整jar包

    Struts2.16、Spring2.5.6、Hibernate3.2以及sqljdbc4是四个在Java开发中广泛使用的开源框架和数据库驱动,它们在构建企业级Web应用程序时起着至关重要的作用。 Struts2.16是MVC(模型-视图-控制器)设计模式的一个...

    struts+spring+hibernate实例

    ### SSH(Struts + Spring + Hibernate)框架整合实例解析 #### 概述 本文将详细介绍一个基于SSH(Struts + Spring + Hibernate)框架的经典实例——简单登录系统的搭建过程。通过本教程,您不仅可以学习到如何...

Global site tag (gtag.js) - Google Analytics