Hibernate Validator @URL不接受没有架构的URL

时间:2013-11-27 17:25:22

标签: java bean-validation hibernate-validator

如果我使用@URL注释字段:

@URL
private String myUrl;

并尝试在没有架构的情况下为其设置值(google.com而不是http://google.com

然后它将抛出ConstraintViolationException

如何让我接受没有架构的网址?

2 个答案:

答案 0 :(得分:2)

作为UrlValidator中验证例程的一部分,实例化具有给定值的java.net.URL对象。它的构造函数不包括没有协议的URL,因此约束被认为是无效的。如果您想接受没有协议的URL,您可以通过@Pattern使用正则表达式,也可以为@Url约束创建自定义验证器,提供您需要的逻辑。

答案 1 :(得分:0)

据我所知,您可以在getter上使用该注释 - 在该方法中,您可以指定应该添加架构(如果它尚未存在)。您甚至可以创建虚拟属性getter:

String getMyUrl() {
    return myUrl;
}

@URL
String getMyUrlWithSchema() {
    return (myUrl != null &&
               !myUrl.startsWith("http://") &&
               !myUrl.startsWith("https://")) ?
           "http://" + myUrl :
           myUrl;   
}

或者,您可以撰写own validator