问题很简短:

让我们考虑以下类:

public class someClass implements someInterface {
    @NotNull
    String someString;

    // ... some cool logic, getters, setters, etc.
}


而这个接口:

public interface SomeInterface {
    // cool stuff
}


此方法在其他地方:

public <T extends SomeInterface> T doStuff (T someInterface) {
    Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
    Set<ConstraintViolation<T>> violatons = validator.validate();
    // ...
    // ...
    // ...
    return someInterface;
}


我在BV方面没有太多经验。会验证SomeClass中的someString还是我需要显式将someInterface强制转换为SomeClass?

此处的方案已简化。实际上,我有不同的通用类和接口,这意味着需要做一些工作。这就是为什么我要仔细询问。

希望周围有其中一位专家!

提前致谢!

最佳答案

Bean验证会从已验证实例的实际类型中获取约束,即,您可以传递接口类型的变量,并且Bean验证会考虑实现中的约束(在超类型和接口上声明的约束同样适用)。

09-26 16:55