如果我使用@URL
注释字段:
@URL
private String myUrl;
并尝试在没有架构的情况下为其设置值(google.com
而不是http://google.com
)
然后它将抛出ConstraintViolationException
。
如何让我接受没有架构的网址?
答案 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。