【发布时间】:2014-11-25 15:49:14
【问题描述】:
我在 Spring 中使用过 Hibernate 验证器,我需要像这样检查模型“Admin”:
@NotEmpty
@Size(min = 4, max = 40)
private String password;
当我保存“admin”时需要密码,我使用了“@Valid @ModelAttribute Admin admin”。 所以保存前会检查。
但是当我更新admin时,如果用户没有提供密码,我们认为他不想更改密码,所以密码的空值是合法的,对于这种情况,我们不能不再使用“@Valid @ModelAttribute Admin admin”,因为密码属性已经被@NotEmpty注解,所以对于这种情况,我们的做法是自己在代码中手动完成,我想有没有更好的方法来解决?我们仍然想使用 Bean Validation 功能。
还有另一个问题:
@NotEmpty
@Size(min = 2, max = 20)
private String username;
我们保存用户名的时候,一定要检查用户名是否存在,也就是说我们需要检查DB,这种情况如果还是用bean验证怎么解决,定义了一个
类级别的注释?
我希望有人可以帮助我。谢谢
【问题讨论】:
-
不要在 Web 层中使用域对象。为每个用例使用特定对象,即。
CreateAdminCommand带有那些没用的属性和验证。和UpdateAdminCommand/UpdateAdminRequest(或任何你喜欢的)以及该用例的属性和验证。给您在您的域中的意图,并且您可以使用服务方法来处理这些不同的用例。唯一的缺点是您需要复制一些数据,优点是清晰并且可以保护您的域。 -
我个人不喜欢需要复制数据并且不得不维护这个额外的层 - 闻起来很旧。对于像
empty or when present values must bear certain rules这样的简单验证规则来说,这太过分了。 -
@RockyHu 你在用 Spring 吗?
-
@bhantol 是的,我用的是弹簧
-
检查我的解决方案...它需要 Spring。
标签: java spring spring-mvc hibernate-validator