JEE6 教程 ( http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html ) 建议使用 JSR-303 / Bean Validation 来验证输入 - 或者至少这是我对它的解释。
尽管如此,一些 Bean 验证注释,例如 @NotNull 可能在接口验证级别没有用,而是在预持久级别。
例如,考虑以下实体:
public class Registry {
@NotNull
String userName;
@NotNull
Date createdAt;
}
在这种情况下,有一个用户名由用户自己填写的表单。但我不希望用户知道该注册表的创建日期。我希望我的后端将它设置为服务器的当前日期。
因此,我通常会将此对象绑定到页面上的表单,并使用 @Valid 执行 JSR-303 验证。但问题是:我不“createdAt”由 Bean Validation 验证,我希望它仅在实体将由 Hibernate 持久化时进行验证。但是,使用 Bean Validation,这两个属性都会在表单请求时得到验证。
如何解决这个问题?JSR-303 应该在这种情况下工作吗?我应该依赖“createdAt”属性的数据库可为空字段验证吗?
这篇文章几乎是关于同一个问题,但我也没有在那里找到任何答案:验证在哪里组织网络应用程序以获得更有效的方式