我使用Hibernate Validator API
来验证对象上的字段。它的外观如下所示。
@NotNull @Size(min = 3, max = 8) String name;
@NotNull @Size(min = 3, max = 16) String surname;
@Size(min = 3, max = 10) String company;
// ...
现在问题是我能够构造我的对象并且不会抛出任何异常。例如。
Person p = new Person("a", "b", "c");
这不会抛出任何运行时异常,而是创建一个违反约束的对象。并且为了获得违反的约束,应该从客户端代码中明确调用Validator
实例。我不完全确定为什么他们这样做,但是如果违反了对象的字段,我需要构造一个失败的对象。那样的话:
Person p = new Person("a", "b", "c");
...会抛出异常。并且无法创建无效对象。这是我想要的行为。
这有可能实现吗?
答案 0 :(得分:0)
为什么不在创建对象时检查ctor中的值?
public Person(String name, String surname, String company) {
if(name == null || name.length() < 3) {
throw new IllegalArgumentException("useful message")
}
}
但是,我认为这些注释仅在将对象保存到DB时才有效。
答案 1 :(得分:0)
Hibernate Validator不能神奇地拦截你的构造函数来执行验证。
所以你需要做点什么。
您可以通过检测课程(使用ByteBuddy或类似的东西)来达到您想要的效果,但我不确定是否会推荐它。
最简单的方法是创建一个服务或类似的实例化对象,然后对其执行验证。