Class MethodValidationPostProcessor

java.lang.Object
org.springframework.aop.framework.ProxyConfig
org.springframework.aop.framework.ProxyProcessorSupport
org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor
org.springframework.aop.framework.autoproxy.AbstractBeanFactoryAwareAdvisingPostProcessor
org.springframework.validation.beanvalidation.MethodValidationPostProcessor
All Implemented Interfaces:
Serializable, org.springframework.aop.framework.AopInfrastructureBean, org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.config.BeanPostProcessor, org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor, org.springframework.beans.factory.config.SmartInstantiationAwareBeanPostProcessor, org.springframework.beans.factory.InitializingBean, org.springframework.core.Ordered

public class MethodValidationPostProcessor extends org.springframework.aop.framework.autoproxy.AbstractBeanFactoryAwareAdvisingPostProcessor implements org.springframework.beans.factory.InitializingBean
A convenient BeanPostProcessor implementation that delegates to a JSR-303 provider for performing method-level validation on annotated methods.

Applicable methods have JSR-303 constraint annotations on their parameters and/or on their return value (in the latter case specified at the method level, typically as inline annotation), e.g.:

 public @NotNull Object myValidMethod(@NotNull String arg1, @Max(10) int arg2)
 

In case of validation errors, the interceptor can raise ConstraintViolationException, or adapt the violations to MethodValidationResult and raise MethodValidationException.

Target classes with such annotated methods need to be annotated with Spring's Validated annotation at the type level, for their methods to be searched for inline constraint annotations. Validation groups can be specified through @Validated as well. By default, JSR-303 will validate against its default group only.

As of Spring 5.0, this functionality requires a Bean Validation 1.1+ provider.

Since:
3.1
Author:
Juergen Hoeller
See Also:
  • Field Summary

    Fields inherited from class org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor

    advisor, beforeExistingAdvisors

    Fields inherited from interface org.springframework.core.Ordered

    HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
     
    protected org.aopalliance.aop.Advice
    Create AOP advice for method validation purposes, to be applied with a pointcut for the specified 'validated' annotation.
    void
    setAdaptConstraintViolations(boolean adaptViolations)
    void
    setValidatedAnnotationType(Class<? extends Annotation> validatedAnnotationType)
    Set the 'validated' annotation type.
    void
    Set the JSR-303 Validator to delegate to for validating methods.
    void
    Set the JSR-303 ValidatorFactory to delegate to for validating methods, using its default Validator.
    void
    setValidatorProvider(org.springframework.beans.factory.ObjectProvider<Validator> validatorProvider)
    Set a lazily initialized Validator to delegate to for validating methods.

    Methods inherited from class org.springframework.aop.framework.autoproxy.AbstractBeanFactoryAwareAdvisingPostProcessor

    isEligible, prepareProxyFactory, setBeanFactory

    Methods inherited from class org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor

    customizeProxyFactory, determineBeanType, isEligible, postProcessAfterInitialization, setBeforeExistingAdvisors

    Methods inherited from class org.springframework.aop.framework.ProxyProcessorSupport

    evaluateProxyInterfaces, getOrder, getProxyClassLoader, isConfigurationCallbackInterface, isInternalLanguageInterface, setBeanClassLoader, setOrder, setProxyClassLoader

    Methods inherited from class org.springframework.aop.framework.ProxyConfig

    copyFrom, isExposeProxy, isFrozen, isOpaque, isOptimize, isProxyTargetClass, setExposeProxy, setFrozen, setOpaque, setOptimize, setProxyTargetClass, toString

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.springframework.beans.factory.config.BeanPostProcessor

    postProcessBeforeInitialization

    Methods inherited from interface org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor

    postProcessAfterInstantiation, postProcessBeforeInstantiation, postProcessProperties

    Methods inherited from interface org.springframework.beans.factory.config.SmartInstantiationAwareBeanPostProcessor

    determineCandidateConstructors, getEarlyBeanReference, predictBeanType
  • Constructor Details

    • MethodValidationPostProcessor

      public MethodValidationPostProcessor()
  • Method Details

    • setValidatedAnnotationType

      public void setValidatedAnnotationType(Class<? extends Annotation> validatedAnnotationType)
      Set the 'validated' annotation type. The default validated annotation type is the Validated annotation.

      This setter property exists so that developers can provide their own (non-Spring-specific) annotation type to indicate that a class is supposed to be validated in the sense of applying method validation.

      Parameters:
      validatedAnnotationType - the desired annotation type
    • setValidatorFactory

      public void setValidatorFactory(ValidatorFactory validatorFactory)
      Set the JSR-303 ValidatorFactory to delegate to for validating methods, using its default Validator.

      Default is the default ValidatorFactory's default Validator.

      See Also:
    • setValidator

      public void setValidator(Validator validator)
      Set the JSR-303 Validator to delegate to for validating methods.

      Default is the default ValidatorFactory's default Validator.

    • setValidatorProvider

      public void setValidatorProvider(org.springframework.beans.factory.ObjectProvider<Validator> validatorProvider)
      Set a lazily initialized Validator to delegate to for validating methods.
      Since:
      6.0
      See Also:
    • setAdaptConstraintViolations

      public void setAdaptConstraintViolations(boolean adaptViolations)
      Whether to adapt ConstraintViolations to MethodValidationResult.

      By default false in which case ConstraintViolationException is raised in case of violations. When set to true, MethodValidationException is raised instead with the method validation results.

      Since:
      6.1
    • afterPropertiesSet

      public void afterPropertiesSet()
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
    • createMethodValidationAdvice

      protected org.aopalliance.aop.Advice createMethodValidationAdvice(Supplier<Validator> validator)
      Create AOP advice for method validation purposes, to be applied with a pointcut for the specified 'validated' annotation.
      Parameters:
      validator - a Supplier for the Validator to use
      Returns:
      the interceptor to use (typically, but not necessarily, a MethodValidationInterceptor or subclass thereof)
      Since:
      6.0