[bv-dev] Container element validation for arrays
gunnar at hibernate.org
Wed Apr 19 04:27:24 EDT 2017
Guillaume made an important observation concerning the validation of
array elements. So far we envisioned to support this:
String @Email  emails;
That looks nice (provided that @Email supports TYPE_USE), only that
it's getting semantics of type annotations for arrays wrong.
As per the JLS , the @Email annotation here applies to the array
type String, not the component type String. This example from the
JLS clarifies the intent:
@C int @A  @B  f;
"@A applies to the array type int, @B applies to its component
and @C applies to the element type int."
So according to that, our example would have to be:
@Email String emails;
But obviously this conflicts with the existing semantics of applying
constraints to arrays (not their elements) in BV 1.1.
So based on that, I don't see a good way for supporting container
element constraints for arrays. Hence my suggestion is to not support
them in the BV 2.0 spec (the validation of container elements of
generic containers - List<@Email String> - is not affected). Specific
implementations may explore ways around it (e.g. specifying the target
via payload()) and we may revisit it in 2.1.
More information about the beanvalidation-dev