Top Description Inners Fields Constructors Methods
org.springframework.validation.beanvalidation

public Class MethodValidationAdapter

extends Object
implements MethodValidator
Class Inheritance
All Implemented Interfaces
org.springframework.validation.method.MethodValidator
Imports
java.lang.reflect.Method, java.util.ArrayList, .Comparator, .Iterator, .LinkedHashMap, .LinkedHashSet, .List, .Map, .Optional, .Set, java.util.function.Function, .Supplier, jakarta.validation.ConstraintViolation, .ElementKind, .Path, .Validation, .Validator, .ValidatorFactory, jakarta.validation.executable.ExecutableValidator, jakarta.validation.metadata.ConstraintDescriptor, org.springframework.aop.framework.AopProxyUtils, org.springframework.aop.support.AopUtils, org.springframework.context.MessageSourceResolvable, org.springframework.context.support.DefaultMessageSourceResolvable, org.springframework.core.BridgeMethodResolver, .Conventions, .DefaultParameterNameDiscoverer, .GenericTypeResolver, .MethodParameter, .ParameterNameDiscoverer, org.springframework.core.annotation.AnnotationUtils, org.springframework.lang.Nullable, org.springframework.util.Assert, org.springframework.util.function.SingletonSupplier, org.springframework.validation.BeanPropertyBindingResult, .BindingResult, .DefaultMessageCodesResolver, .Errors, .MessageCodesResolver, org.springframework.validation.annotation.Validated, org.springframework.validation.method.MethodValidationResult, .MethodValidator, .ParameterErrors, .ParameterValidationResult

MethodValidator that uses a Bean Validation jakarta.validation.Validator for validation, and adapts ConstraintViolations to MethodValidationResult.
Author
Rossen Stoyanchev
Since
6.1

Nested and Inner Type Summary

Modifier and TypeClass and Description
private static class
MethodValidationAdapter.DefaultObjectNameResolver

Default algorithm to select an object name, as described in setObjectNameResolver(ObjectNameResolver).

public static interface
MethodValidationAdapter.ObjectNameResolver

Strategy to resolve the name of an @Valid method parameter to use for its BindingResult.

private class
MethodValidationAdapter.ParamErrorsBuilder

Builds a validation result for an @Valid annotated bean method parameter with cascaded constraints.

private class
MethodValidationAdapter.ParamValidationResultBuilder

Builds a validation result for a value method parameter with constraints declared directly on it.

private static class
MethodValidationAdapter.ResultComparator

Comparator for validation results, sorted by method parameter index first, also falling back on container indexes if necessary for cascaded constraints on a List container.

Field Summary

Modifier and TypeField and Description
private static final MethodValidationAdapter.ObjectNameResolver
private static final MethodValidationResult
private MessageCodesResolver
private MethodValidationAdapter.ObjectNameResolver
private ParameterNameDiscoverer
private static final Comparator<ParameterValidationResult>
private final Supplier<Validator>
private final Supplier<SpringValidatorAdapter>

Constructor Summary

AccessConstructor and Description
public
MethodValidationAdapter()

Create an instance using a default JSR-303 validator underneath.

public
MethodValidationAdapter(ValidatorFactory
the JSR-303 ValidatorFactory to use
validatorFactory
)

Create an instance using the given JSR-303 ValidatorFactory.

public
MethodValidationAdapter(Validator
the JSR-303 Validator to use
validator
)

Create an instance using the given JSR-303 Validator.

public
MethodValidationAdapter(Supplier<Validator>
a Supplier for the Validator to use
validator
)

Create an instance for the supplied (potentially lazily initialized) Validator.

Method Summary

Modifier and TypeMethod and Description
private MethodValidationResult
adaptViolations(Object target, Method method, Set<ConstraintViolation<Object>> violations, Function<Integer, MethodParameter> parameterFunction, Function<Integer, Object> argumentFunction)

private BindingResult
private MessageSourceResolvable
public Class<?>[]
determineValidationGroups(Object
the target Object
target
,
Method
the target method
method
)

Implements org.springframework.validation.method.MethodValidator.determineValidationGroups.

Determine the applicable validation groups.
public MessageCodesResolver
getMessageCodesResolver()

Return the configured MessageCodesResolver.

public ParameterNameDiscoverer
getParameterNameDiscoverer()

Return the configured ParameterNameDiscoverer.

public Supplier<SpringValidatorAdapter>
getSpringValidatorAdapter()

Return the SpringValidatorAdapter configured for use.

private MethodParameter
initMethodParameter(Method method, int index)

private static Supplier<SpringValidatorAdapter>
public final Set<ConstraintViolation<Object>>
invokeValidatorForArguments(Object target, Method method, Object[] arguments, Class<?>[] groups)

Invoke the validator, and return the resulting violations.

public final Set<ConstraintViolation<Object>>
invokeValidatorForReturnValue(Object target, Method method, Object returnValue, Class<?>[] groups)

Invoke the validator, and return the resulting violations.

public void
setMessageCodesResolver(MessageCodesResolver messageCodesResolver)

Set the strategy to use to determine message codes for violations.

public void
setObjectNameResolver(MethodValidationAdapter.ObjectNameResolver nameResolver)

Configure a resolver to determine the name of an @Valid method parameter to use for its BindingResult.

public void
setParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer)

Set the ParameterNameDiscoverer to discover method parameter names with to create error codes for MessageSourceResolvable.

public final MethodValidationResult
validateArguments(Object
the target Object
target
,
Method
the target method
method
,
MethodParameter[]
the parameters, if already created and available
parameters
,
Object[]
the candidate argument values to validate
arguments
,
Class<?>[]
validation groups from determineValidationGroups
groups
)

Implements org.springframework.validation.method.MethodValidator.validateArguments.

Validate the given method arguments and return validation results.
public final MethodValidationResult
validateReturnValue(Object
the target Object
target
,
Method
the target method
method
,
MethodParameter
the return parameter, if already created and available
returnType
,
Object
the return value to validate
returnValue
,
Class<?>[]
validation groups from determineValidationGroups
groups
)

Implements org.springframework.validation.method.MethodValidator.validateReturnValue.

Validate the given return value and return validation results.
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

defaultObjectNameResolverback to summary
private static final MethodValidationAdapter.ObjectNameResolver defaultObjectNameResolver
emptyValidationResultback to summary
private static final MethodValidationResult emptyValidationResult
messageCodesResolverback to summary
private MessageCodesResolver messageCodesResolver
objectNameResolverback to summary
private MethodValidationAdapter.ObjectNameResolver objectNameResolver
parameterNameDiscovererback to summary
private ParameterNameDiscoverer parameterNameDiscoverer
resultComparatorback to summary
private static final Comparator<ParameterValidationResult> resultComparator
validatorback to summary
private final Supplier<Validator> validator
validatorAdapterback to summary
private final Supplier<SpringValidatorAdapter> validatorAdapter

Constructor Detail

MethodValidationAdapterback to summary
public MethodValidationAdapter()

Create an instance using a default JSR-303 validator underneath.

MethodValidationAdapterback to summary
public MethodValidationAdapter(ValidatorFactory validatorFactory)

Create an instance using the given JSR-303 ValidatorFactory.

Parameters
validatorFactory:ValidatorFactory

the JSR-303 ValidatorFactory to use

Annotations
@SuppressWarnings:DataFlowIssue
MethodValidationAdapterback to summary
public MethodValidationAdapter(Validator validator)

Create an instance using the given JSR-303 Validator.

Parameters
validator:Validator

the JSR-303 Validator to use

MethodValidationAdapterback to summary
public MethodValidationAdapter(Supplier<Validator> validator)

Create an instance for the supplied (potentially lazily initialized) Validator.

Parameters
validator:Supplier<Validator>

a Supplier for the Validator to use

Method Detail

adaptViolationsback to summary
private MethodValidationResult adaptViolations(Object target, Method method, Set<ConstraintViolation<Object>> violations, Function<Integer, MethodParameter> parameterFunction, Function<Integer, Object> argumentFunction)
createBindingResultback to summary
private BindingResult createBindingResult(MethodParameter parameter, Object argument)
createMessageSourceResolvableback to summary
private MessageSourceResolvable createMessageSourceResolvable(Object target, MethodParameter parameter, ConstraintViolation<Object> violation)
determineValidationGroupsback to summary
public Class<?>[] determineValidationGroups(Object target, Method method)

Implements org.springframework.validation.method.MethodValidator.determineValidationGroups.

Doc from org.springframework.validation.method.MethodValidator.determineValidationGroups.

Determine the applicable validation groups. By default, obtained from an @Validated annotation on the method, or on the class level..

Default are the validation groups as specified in the Validated annotation on the method, or on the containing target class of the method, or for an AOP proxy without a target (with all behavior in advisors), also check on proxied interfaces.

Parameters
target:Object

the target Object

method:Method

the target method

Returns:Class<?>[]

the applicable validation groups as a Class array

Annotations
@Override
getMessageCodesResolverback to summary
public MessageCodesResolver getMessageCodesResolver()

Return the configured MessageCodesResolver.

getParameterNameDiscovererback to summary
public ParameterNameDiscoverer getParameterNameDiscoverer()

Return the configured ParameterNameDiscoverer.

getSpringValidatorAdapterback to summary
public Supplier<SpringValidatorAdapter> getSpringValidatorAdapter()

Return the SpringValidatorAdapter configured for use.

initMethodParameterback to summary
private MethodParameter initMethodParameter(Method method, int index)
initValidatorAdapterback to summary
private static Supplier<SpringValidatorAdapter> initValidatorAdapter(Supplier<Validator> validatorSupplier)
invokeValidatorForArgumentsback to summary
public final Set<ConstraintViolation<Object>> invokeValidatorForArguments(Object target, Method method, Object[] arguments, Class<?>[] groups)

Invoke the validator, and return the resulting violations.

invokeValidatorForReturnValueback to summary
public final Set<ConstraintViolation<Object>> invokeValidatorForReturnValue(Object target, Method method, Object returnValue, Class<?>[] groups)

Invoke the validator, and return the resulting violations.

setMessageCodesResolverback to summary
public void setMessageCodesResolver(MessageCodesResolver messageCodesResolver)

Set the strategy to use to determine message codes for violations.

Default is a DefaultMessageCodesResolver.

setObjectNameResolverback to summary
public void setObjectNameResolver(MethodValidationAdapter.ObjectNameResolver nameResolver)

Configure a resolver to determine the name of an @Valid method parameter to use for its BindingResult. This allows aligning with a higher level programming model such as to resolve the name of an @ModelAttribute method parameter in Spring MVC.

By default, the object name is resolved through:

If a name cannot be determined, e.g. a return value with insufficient type information, then it defaults to one of:
  • "{methodName}.arg{index}" for input parameters
  • "{methodName}.returnValue" for a return type
setParameterNameDiscovererback to summary
public void setParameterNameDiscoverer(ParameterNameDiscoverer parameterNameDiscoverer)

Set the ParameterNameDiscoverer to discover method parameter names with to create error codes for MessageSourceResolvable. Used only when MethodParameters are not passed into validateArguments or validateReturnValue.

Default is org.springframework.core.DefaultParameterNameDiscoverer.

validateArgumentsback to summary
public final MethodValidationResult validateArguments(Object target, Method method, MethodParameter[] parameters, Object[] arguments, Class<?>[] groups)

Implements org.springframework.validation.method.MethodValidator.validateArguments.

Doc from org.springframework.validation.method.MethodValidator.validateArguments.

Validate the given method arguments and return validation results.

Parameters
target:Object

the target Object

method:Method

the target method

parameters:MethodParameter[]

the parameters, if already created and available

arguments:Object[]

the candidate argument values to validate

groups:Class<?>[]

validation groups from determineValidationGroups

Returns:MethodValidationResult

the result of validation

Annotations
@Override
validateReturnValueback to summary
public final MethodValidationResult validateReturnValue(Object target, Method method, MethodParameter returnType, Object returnValue, Class<?>[] groups)

Implements org.springframework.validation.method.MethodValidator.validateReturnValue.

Doc from org.springframework.validation.method.MethodValidator.validateReturnValue.

Validate the given return value and return validation results.

Parameters
target:Object

the target Object

method:Method

the target method

returnType:MethodParameter

the return parameter, if already created and available

returnValue:Object

the return value to validate

groups:Class<?>[]

validation groups from determineValidationGroups

Returns:MethodValidationResult

the result of validation

Annotations
@Override
org.springframework.validation.beanvalidation back to summary

private Class MethodValidationAdapter.DefaultObjectNameResolver

extends Object
implements ObjectNameResolver
Class Inheritance
  • java.lang.Object
  • org.springframework.validation.beanvalidation.MethodValidationAdapter.DefaultObjectNameResolver
All Implemented Interfaces
org.springframework.validation.beanvalidation.MethodValidationAdapter.ObjectNameResolver

Default algorithm to select an object name, as described in setObjectNameResolver(ObjectNameResolver).

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
public String
resolveName(MethodParameter
the method parameter
parameter
,
Object
the argument value or return value
value
)

Implements org.springframework.validation.beanvalidation.MethodValidationAdapter.ObjectNameResolver.resolveName.

Determine the name for the given method argument.
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Constructor Detail

DefaultObjectNameResolverback to summary
private DefaultObjectNameResolver()

Method Detail

resolveNameback to summary
public String resolveName(MethodParameter parameter, Object value)

Implements org.springframework.validation.beanvalidation.MethodValidationAdapter.ObjectNameResolver.resolveName.

Doc from org.springframework.validation.beanvalidation.MethodValidationAdapter.ObjectNameResolver.resolveName.

Determine the name for the given method argument.

Parameters
parameter:MethodParameter

the method parameter

value:Object

the argument value or return value

Returns:String

the name to use

Annotations
@Override
org.springframework.validation.beanvalidation back to summary

public Interface MethodValidationAdapter.ObjectNameResolver

Known Direct Implementers
org.springframework.validation.beanvalidation.MethodValidationAdapter.DefaultObjectNameResolver

Strategy to resolve the name of an @Valid method parameter to use for its BindingResult.

Method Summary

Modifier and TypeMethod and Description
public String

Returns:

the name to use
resolveName
(MethodParameter
the method parameter
parameter
,
Object
the argument value or return value
value
)

Determine the name for the given method argument.

Method Detail

resolveNameback to summary
public String resolveName(MethodParameter parameter, Object value)

Determine the name for the given method argument.

Parameters
parameter:MethodParameter

the method parameter

value:Object

the argument value or return value

Returns:String

the name to use

org.springframework.validation.beanvalidation back to summary

private final Class MethodValidationAdapter.ParamErrorsBuilder

extends Object
Class Inheritance
  • java.lang.Object
  • org.springframework.validation.beanvalidation.MethodValidationAdapter.ParamErrorsBuilder

Builds a validation result for an @Valid annotated bean method parameter with cascaded constraints.

Field Summary

Modifier and TypeField and Description
private final Object
private final Object
private final Integer
private final Object
private final Errors
private final MethodParameter
private final Set<ConstraintViolation<Object>>

Constructor Summary

AccessConstructor and Description
public
ParamErrorsBuilder(MethodParameter param, Object bean, Object container, Integer containerIndex, Object containerKey)

Method Summary

Modifier and TypeMethod and Description
public void
public ParameterErrors
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

beanback to summary
private final Object bean
Annotations
@Nullable
containerback to summary
private final Object container
Annotations
@Nullable
containerIndexback to summary
private final Integer containerIndex
Annotations
@Nullable
containerKeyback to summary
private final Object containerKey
Annotations
@Nullable
errorsback to summary
private final Errors errors
parameterback to summary
private final MethodParameter parameter
violationsback to summary
private final Set<ConstraintViolation<Object>> violations

Constructor Detail

ParamErrorsBuilderback to summary
public ParamErrorsBuilder(MethodParameter param, Object bean, Object container, Integer containerIndex, Object containerKey)

Method Detail

addViolationback to summary
public void addViolation(ConstraintViolation<Object> violation)
buildback to summary
public ParameterErrors build()
org.springframework.validation.beanvalidation back to summary

private final Class MethodValidationAdapter.ParamValidationResultBuilder

extends Object
Class Inheritance
  • java.lang.Object
  • org.springframework.validation.beanvalidation.MethodValidationAdapter.ParamValidationResultBuilder

Builds a validation result for a value method parameter with constraints declared directly on it.

Field Summary

Modifier and TypeField and Description
private final Object
private final Integer
private final Object
private final MethodParameter
private final List<MessageSourceResolvable>
private final Object
private final Object

Constructor Summary

AccessConstructor and Description
public
ParamValidationResultBuilder(Object target, MethodParameter parameter, Object value, Object container, Integer containerIndex, Object containerKey)

Method Summary

Modifier and TypeMethod and Description
public void
public ParameterValidationResult
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

containerback to summary
private final Object container
Annotations
@Nullable
containerIndexback to summary
private final Integer containerIndex
Annotations
@Nullable
containerKeyback to summary
private final Object containerKey
Annotations
@Nullable
parameterback to summary
private final MethodParameter parameter
resolvableErrorsback to summary
private final List<MessageSourceResolvable> resolvableErrors
targetback to summary
private final Object target
valueback to summary
private final Object value
Annotations
@Nullable

Constructor Detail

ParamValidationResultBuilderback to summary
public ParamValidationResultBuilder(Object target, MethodParameter parameter, Object value, Object container, Integer containerIndex, Object containerKey)

Method Detail

addViolationback to summary
public void addViolation(ConstraintViolation<Object> violation)
buildback to summary
public ParameterValidationResult build()
org.springframework.validation.beanvalidation back to summary

private final Class MethodValidationAdapter.ResultComparator

extends Object
implements Comparator<ParameterValidationResult>
Class Inheritance
  • java.lang.Object
  • org.springframework.validation.beanvalidation.MethodValidationAdapter.ResultComparator
All Implemented Interfaces
java.util.Comparator

Comparator for validation results, sorted by method parameter index first, also falling back on container indexes if necessary for cascaded constraints on a List container.

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
public int
compare(ParameterValidationResult
the first object to be compared.
result1
,
ParameterValidationResult
the second object to be compared.
result2
)

Implements java.util.Comparator.compare.

Compares its two arguments for order.
private <E> int
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Constructor Detail

ResultComparatorback to summary
private ResultComparator()

Method Detail

compareback to summary
public int compare(ParameterValidationResult result1, ParameterValidationResult result2)

Implements java.util.Comparator.compare.

Doc from java.util.Comparator.compare.

Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

The implementor must ensure that signum(compare(x, y)) == -signum(compare(y, x)) for all x and y. (This implies that compare(x, y) must throw an exception if and only if compare(y, x) throws an exception.)

The implementor must also ensure that the relation is transitive: ((compare(x, y)>0) && (compare(y, z)>0)) implies compare(x, z)>0.

Finally, the implementor must ensure that compare(x, y)==0 implies that signum(compare(x, z))==signum(compare(y, z)) for all z.

Parameters
result1:ParameterValidationResult

the first object to be compared.

result2:ParameterValidationResult

the second object to be compared.

Returns:int

a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

Annotations
@Override
compareKeysback to summary
private <E> int compareKeys(ParameterErrors errors1, ParameterErrors errors2)
Annotations
@SuppressWarnings:unchecked