I am validating my POJOs in a REST resource endpoint in 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;
...
}
This seems to work fine.
However, the @Min(0)
annotation is only verified if the field inner
has the @Valid
annotation. It doesn't feel right to add the @Valid
annotation to each field which isn't a primitive.
Is there a way to tell the bean validator to automatically recursively continue the validation, even when no @Valid
annotation is present? I would like my POJO
to be as following:
public class POJO {
@NotNull
protected final String name;
@NotNull
protected final POJOInner inner;
...
}
Actually, according to the specification, adding @Valid is exactly for this usecase. From the JSR 303 specification:
In addition to supporting instance validation, validation of graphs of object is also supported. The result of a graph validation is returned as a unified set of constraint violations. Consider the situation where bean X contains a field of type Y. By annotating field Y with the @Valid annotation, the Validator will validate Y (and its properties) when X is validated.
...
The @Valid annotation is applied recursively