Проверка бина `isValid` Параметр метода всегда нулевой - PullRequest
0 голосов
/ 20 сентября 2018

Я часами отлаживал свой код, но не мог понять, почему параметр метода 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

В чем здесь может быть проблема?

...