在字段可以使用电子邮件或URL的预定义验证器上进行弹簧模式验证

时间:2018-08-02 20:43:30

标签: java spring validation spring-mvc spring-validator

在我的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。在标题中对此予以澄清。

2 个答案:

答案 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;
}