问题
How can we ensure the individual strings inside a list are not null/blank or follow a specific pattern
@NotNull
List<String> emailIds;
I also want to add a pattern
@Pattern("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b.")
but I can live without it.But I would definitely like to have a constraint which will check if any strings inside a list are null or blank. Also how would the Json schema look like
"ids": {
"description": "The ids associated with this.",
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"required" :true }
}
"required" :true does not seem to do the job
回答1:
You can create a simple wrapper class for the e-mail String:
public class EmailAddress {
@Pattern("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\b.")
String email;
//getters and setters
}
Then mark the field @Valid
in your existing object:
@NotNull
@Valid
List<EmailAddress> emailIds;
The validator will then validate each object in the list.
回答2:
Bean validation 2.0 (Hibernate Validator 6.0.1 and above) supports validating container elements by annotating type arguments of parameterized types. Example:
List<@Positive Integer> positiveNumbers;
Or even (although a bit busy):
List<@NotNull @Pattern(regexp="\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\\b") String> emails;
References:
- http://beanvalidation.org/2.0/
- https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#_with_code_list_code
回答3:
You don’t have to use any wrapper class just to validate a list of strings. Just use @EachPattern
constraint from validator-collection:
@NotNull
@EachPattern(regexp="\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\b.")
List<String> values;
And that’s all. Easy, right? See this SO answer for more information.
回答4:
In my opinion, use a wrapper class for the object, and have your own verification on the methods:
public class ListWrapper<E> {
private List<E> list = new ArrayList<>();
private Pattern check = /*pattern*/;
public boolean add(E obj) {
if (this.verify(obj)) {
return list.add(obj);
}
return false;
}
//etc
public boolean verify(E obj) {
//check pattern and for null
}
Alternatively, just use a custom object for the list
来源:https://stackoverflow.com/questions/22233512/adding-notnull-or-pattern-constraints-on-liststring