Class MethodValidationPostProcessor

All Implemented Interfaces:
Serializable, AopInfrastructureBean, Aware, BeanClassLoaderAware, BeanFactoryAware, BeanPostProcessor, InstantiationAwareBeanPostProcessor, SmartInstantiationAwareBeanPostProcessor, InitializingBean, Ordered

public class MethodValidationPostProcessor extends AbstractBeanFactoryAwareAdvisingPostProcessor implements 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:
  • 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(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()
      Description copied from interface: InitializingBean
      Invoked by the containing BeanFactory after it has set all bean properties and satisfied BeanFactoryAware, ApplicationContextAware etc.

      This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.

      Specified by:
      afterPropertiesSet in interface InitializingBean
    • createMethodValidationAdvice

      protected 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