Je valide mes POJO dans un point de terminaison de ressource REST à Jersey:
public class Resource {
@POST
public Response post(@NotNull @Valid final POJO pojo) {
...
}
}
public class POJO {
@NotNull
protected final String name;
@NotNull
@Valid
protected final POJOInner inner;
...
}
public class POJOInner {
@Min(0)
protected final int limit;
...
}
Cela semble bien fonctionner.
Cependant, l'annotation @Min(0)
n'est vérifiée que si le champ inner
a l'annotation @Valid
. Il ne semble pas juste d'ajouter l'annotation @Valid
À chaque champ qui n'est pas une primitive.
Existe-t-il un moyen de dire au validateur de bean de poursuivre automatiquement et récursivement la validation, même si aucune annotation @Valid
N'est présente? Je voudrais que mon POJO
soit comme suit:
public class POJO {
@NotNull
protected final String name;
@NotNull
protected final POJOInner inner;
...
}
En fait, selon la spécification, l'ajout de @Valid est exactement pour ce cas d'utilisation. D'après la spécification JSR 303:
En plus de prendre en charge la validation d'instance, la validation des graphiques d'objet est également prise en charge. Le résultat d'une validation de graphique est renvoyé sous la forme d'un ensemble unifié de violations de contraintes. Considérez la situation où le bean X contient un champ de type Y. En annotant le champ Y avec l'annotation @Valid, le validateur validera Y (et ses propriétés) lorsque X est validé.
...
L'annotation @Valid est appliquée récursivement