如何防止更新时的 Spring 验证

JSE*_*eny 5 validation spring annotations

我为唯一的电子邮件做了一个自定义验证注释(当用户自己注册时,程序会检查电子邮件是否已经在数据库中)。

一切正常,但是当我需要修改用户信息而不是创建新信息时,我遇到了“电子邮件已在使用中”的问题

我可以以某种方式仅关闭@UniqueEmail验证吗(我需要其他的,如电子邮件模式和密码验证)?

所有验证注释都在同一个 User bean 中。

谢谢你。

Bor*_*der 2

我假设您正在使用javax.validation.

首先你需要一个interface OnUpdate

javax.validation.groups.Default

public interface OnUpdate extends Default {}
Run Code Online (Sandbox Code Playgroud)

现在您需要设置需要在以下位置运行的所有注释:UPDATE

@NotNull(groups = OnUpdate.class)
Run Code Online (Sandbox Code Playgroud)

现在,您已将验证分为两组,即 中的验证OnUpdateDefault. 运行Default将包括OnUpdateas OnUpdateextends中的那些Default

现在,这就是有点棘手的地方 - 您需要告诉框架在每个任务上运行哪些验证。

如果使用 JPA,您只需设置以下属性:

javax.persistence.validation.group.pre-update = com.my.package.OnUpdate
Run Code Online (Sandbox Code Playgroud)

  • @PacoAbato 这是不正确的。这个答案是关于触发 JPA 验证的。您的评论是关于在 Spring MVC 中验证传入请求的。这是非常不同的。 (2认同)