validation-spec icon indicating copy to clipboard operation
validation-spec copied to clipboard

Array elements can't be validated

Open bjansen opened this issue 1 year ago • 3 comments

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). 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.

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:

  • @Size(min = 1, max = 3) String[] validates the array length whereas it should in theory validate each String element
  • String @Size(min = 1, max = 3)[] should validate the array length but it does nothing at the moment.

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

bjansen avatar Apr 30 '24 08:04 bjansen