Я часами отлаживал свой код, но не мог понять, почему параметр метода isValid
всегда имеет значение null:
@Bindable
public class EntityLinkNameModel {
@WithoutSpace(groups = { DraftValidationGroup.class, PersistenceValidationGroup.class }, message = ValidationMessages.FIELD_WITH_WHITESPACE)
private String linkName;
public EntityLinkNameModel() {}
public EntityLinkNameModel(String linkName) {
setLinkName(linkName);
}
public String getLinkName() {
return linkName;
}
public void setLinkName(String linkName) {
this.linkName = linkName;
}
}
Валидатор для этого
public class WithoutSpaceValidator implements ConstraintValidator<WithoutSpace, String> {
public void initialize(WithoutSpace constraintAnnotation) {
}
public boolean isValid(String object, ConstraintValidatorContext constraintContext) {
boolean hasWhiteSpace = false;
if(object != null) { // Problem is here, String is always null
for (char c : object.toCharArray()) {
if (Character.isWhitespace(c)) {
hasWhiteSpace = true;
}
}
}
return object !=null && !hasWhiteSpace;
}
}
Однако проверка всегда приводит к нулевому значению поля модели
EntityLinkNameModel model = getModel();
Console.log(model.getLinkName()); // Output is the name, so clearly this is not null
Set<ConstraintViolation<EntityLinkNameModel>> violations = validator.validate(model, DraftValidationGroup.class, PersistenceValidationGroup.class);
if(violations.isEmpty()) {} // but this is not empty and log even shows the `linkName` field passed into the `isValid` method is null
В чем здесь может быть проблема?