从哪里加载的validator呢
默认就是用下面的这个validator
是在WebMvcConfigurationSupport中决定的
这个地方开始进入验证
ModelAttributeMethodProcessor:
1.resolveArgument
{
这个地方有创建binder
WebDataBinder binder = binderFactory.createBinder(webRequest, attribute, name);
}
this.initializer.initBinder(dataBinder, webRequest);
这句话最重要
2.validateIfApplicable
DataBinder: validate
DataBinder中含有
private final List<Validator> validators = new ArrayList<Validator>();
真实的验证发生在
SpringValidatorAdapter 中targetValidator的validate
他的实现可以是hibernate中的ValidatorImpl
上面的可以使用hibernate默认的错误信息
同时包含自定义的错误信息
注意VALIDATION_FILE_NAME不能包含classpath
可以看可以有文件夹
默认就是用下面的这个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;
}
* 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
可以看可以有文件夹
发表评论
-
springmvc controller默认是单例
2015-05-06 14:22 1058springmvc controller默认是单例 -
springmvc 请求的路径的选择
2015-05-04 11:11 451方法请求 AbstractHandlerMethodMappi ... -
springmvc 返回结果的转换xml
2015-04-29 11:22 542xml Jaxb2RootElementHttpMessage ... -
springmvc 异常处理
2015-04-21 10:04 438异常在哪里处理的呢 DispatcherServlet : ... -
如何在springmvc中获取国际化信息
2015-04-16 13:50 557public class SpringContext impl ... -
springMacroRequestContext如何暴露和使用
2015-04-13 17:24 538AbstractView:createMergedOutput ... -
springmvc的注解验证是怎么加进去的
2015-04-10 16:48 1076The main Bean Validation class. ... -
springmvc viewResolver在哪个地方
2015-04-04 22:26 561Dispatcher: Controller Handler ... -
spring4 零配置启动
2015-04-03 16:38 653引用@Order(1) public class WebApp ... -
哪个地方添加的MappingJackson2HttpMessageConverter
2015-04-02 14:50 1100spring4零配置 一般通过WebMvcConfigurat ... -
springmvc 返回结果的转换JSON
2015-04-01 11:21 1262springmvc 返回结果的转换 RequestMappi ... -
spring4零配置--添加servlet
2015-02-27 17:04 25851.实现AbstractAnnotationConfigDis ... -
SpringMVC自定义日期类型的数据转换器
2015-02-10 09:54 893此方法适用于springmvc4零配置 1. /** * s ...
相关推荐
本文将深入探讨Resin如何支持Spring MVC 5.0及以上版本,以及它对Hibernate Validation的支持。 首先,Spring MVC 5.0引入了许多改进和新特性,例如对Java 8的全面支持、更好的类型安全的模型绑定、增强的路径变量...
在 Spring Boot 应用中,可以直接在控制器方法的参数上使用 Hibernate Validation 注解,Spring MVC 会自动进行验证: ```java @PostMapping("/users") public ResponseEntity createUser(@Valid User user, ...
在Spring MVC中集成Hibernate Validation,可以实现对输入数据的有效性检查,从而提升应用程序的健壮性和用户体验。 首先,让我们深入了解一下Spring MVC中的数据绑定和验证。Spring MVC支持模型驱动的数据绑定,它...
Spring3作为其第三个主要版本,引入了更多增强功能和对新特性的支持,如Spring MVC的改进、对JSR-303/JSR-349 Bean Validation的支持以及Spring Security的增强。 Hibernate则是一个对象关系映射(ORM)框架,它...
4. spring-orm:提供与各种ORM框架(如Hibernate)的集成。 5. spring-web:对于Web应用,此模块提供了Servlet API的支持。 Hibernate的jar文件主要包括: 1. hibernate-core:Hibernate的核心库,包含对象关系映射...
此外,Spring2.5对JSR-303(Bean Validation)的支持,使数据验证变得更加简单。 Hibernate3.3则是一个持久层框架,它简化了数据库操作,通过ORM(Object-Relational Mapping,对象关系映射)技术将Java对象与...
4. **整合Spring和Struts**:通过Spring的Struts插件,让Spring管理Struts的Action实例。 5. **整合Spring和Hibernate**:在Spring配置文件中,配置Hibernate的SessionFactory,并创建DAO bean,注入SessionFactory...
本教程将详细介绍如何在Spring MVC中配置并使用Hibernate Validation进行数据校验。 首先,我们需要引入必要的依赖。在Spring MVC项目中,通常我们会使用Maven或Gradle作为构建工具。对于Hibernate Validator,可以...
在Spring框架中,注解和Validation是两个关键的组件,它们极大地简化了应用程序的开发过程。Validation主要用于数据验证,而Spring注解则提供了声明式编程的能力,使得代码更加简洁、可读性更强。这里我们将详细探讨...
在Spring3中,你可以看到对JSR-303(Bean Validation)和JSR-311(RESTful Web服务)的支持增强,这使得开发更现代的Web应用程序变得更加便捷。 Hibernate3是一个强大的对象关系映射(ORM)框架,它简化了Java应用...
而Hibernate Validator是Hibernate项目的一部分,它是JSR-303/JSR-349 Bean Validation规范的参考实现,用于校验对象的属性,确保数据的准确性和完整性。 4. **JDBC**: Java Database Connectivity,是Java语言访问...
4. **集成Spring MVC**:在Spring MVC中,可以通过配置`LocalValidatorFactoryBean`作为bean来启用Hibernate Validation。此外,还可以使用`@Valid`注解在控制器方法的参数上,自动触发对模型对象的验证。 5. **...
在IT行业中,Spring、Hibernate和Validator是三个非常重要的框架,它们在Java开发中扮演着核心角色。本示例代码着重展示了如何将这三个组件整合在一起,实现数据校验和持久化功能。 Spring是一个全面的后端应用程序...
Struts2、Spring3和Hibernate4是Java Web开发中的三大框架,它们的整合极大地提高了开发效率,简化了项目结构,并提供了强大的功能。SSH(Struts2、Spring、Hibernate)是企业级应用开发的常见选择,这主要是因为...
3.0.6版本的Spring引入了许多改进和新特性,例如支持JSR-303 Bean Validation,增强了对RESTful服务的支持,以及对Java EE 6的全面兼容。 Hibernate是一个对象关系映射(Object-Relational Mapping, ORM)工具,它...
4. **更多支持**:Spring 2.5 还增强了对JSR-303 Bean Validation、RESTful服务和Java Persistence API(JPA)的支持。 Hibernate 3.2.0 版本则包含以下关键特性: 1. **性能优化**:在3.2版本中,Hibernate 对查询...
4. 支持JSR-303/JSR-349 Bean Validation:集成JavaBean验证标准,简化业务逻辑验证。 **Hibernate3.3** Hibernate是一个对象关系映射(ORM)框架,它允许开发者将Java对象与数据库表进行映射,减少了SQL的编写。在...
Spring 3.0是Spring框架的一个重要版本,它提供了许多改进和新特性,如对JSR-303/JSR-349(Bean Validation)的支持,改进的AOP(面向切面编程)功能,以及对RESTful服务的更好支持。Spring 3.0的改进使得与Spring ...
Struts2.16、Spring2.5.6、Hibernate3.2以及sqljdbc4是四个在Java开发中广泛使用的开源框架和数据库驱动,它们在构建企业级Web应用程序时起着至关重要的作用。 Struts2.16是MVC(模型-视图-控制器)设计模式的一个...
4. **整合Hibernate和Spring**: Spring可以通过HibernateDaoSupport类或者SessionFactoryBean来管理SessionFactory,实现事务的统一管理。 5. **开发业务逻辑**: 使用Spring的Service层和Hibernate的DAO层处理数据...