在我的Spring应用程序中,我正在尝试验证一个字段,该字段可以是电子邮件地址或url(据我所知这是非标准的)。
我希望以某种组合使用预定义的验证器@Email和@URL,而不是使用大量的正则表达式或实现我自己的验证方法。这是我正在尝试的:
@NotEmpty(message = "{plugin.helpUrl.notEmpty}")
@Size(min = 3, max = 1000, message = "{plugin.helpUrl.invalidLength}")
@Email
@URL
private String helpUrl;
当然,如果输入电子邮件,则URL验证器将失败,如果输入URL,则电子邮件验证器将失败。这种行为确实有道理,但我想知道是否存在一种以@Email OR @URL
之类的OR方式使用它们的方法。
编辑:澄清一下,我知道可以通过实现验证接口等方式来实现此验证。我希望回答的问题是:我可以使用预定义的验证器@Email和@完成此操作的URL。在标题中对此予以澄清。
答案 0 :(得分:0)
创建一个实用程序超类ValidateField。创建两个子类ValidateEmail和ValidateUrl对其进行扩展,每个子类都具有一个注释。使用字段创建每个字段以在构造函数中进行验证。在实例化每个类的类中捕获异常,并设置布尔变量是否有效。如果抛出少于2个异常,则它是有效的。 wind之以鼻,但会实现您想要的。
答案 1 :(得分:0)
您可以使用@AssertTrue
。在Request类中实现此方法。发出请求时,将调用此方法进行验证。
@Valid
@AssertTrue
public boolean isValidEmailOrUrl(){
if(new URLValidator().isValid(helpUrl,null) || new EmailValidator().isValid(helpUrl,null)){
return true;
}
return false;
}