jakartaee / validation-spec

Jakarta Validation spec document
http://beanvalidation.org
Apache License 2.0
20 stars 22 forks source link

Array elements can't be validated #282

Open bjansen opened 4 months ago

bjansen commented 4 months ago

Hi,

I'm trying to validate each element of an array, rather than the size of said array.

According to jls§9.7.4, annotations can be used on arrays like this:

Type annotations can apply to an array type or any component type thereof ([§10.1](https://docs.oracle.com/javase/specs/jls/se22/html/jls-10.html#jls-10.1)). For example, assuming that A, B, and C are annotation interfaces meta-annotated with `@Target(ElementType.TYPE_USE)`, then given the field declaration:
@C int @A [] @B [] f;
`@A` applies to the array type int[][], `@B` applies to its component type int[], and `@C` applies to the element type int. For more examples, see [§10.2](https://docs.oracle.com/javase/specs/jls/se22/html/jls-10.html#jls-10.2).

So essentially, these two declarations are "equivalent" according to the JLS:

private @NotEmpty List<@Size(min=1,max=3) String> myList;

private @Size(min=1,max=3) String @NotEmpty[] myArray;

It seems to me that currently it is only possible to validate the length of an array, but not validate each element inside this array. I also have the impression that the current behavior is different from what is described in the above JLS excerpt, and also different from how Lists are validated:

See this sample project for JUnit test cases to reproduce the problem: https://github.com/bjansen/arrays-validation