2017-08-30 71 views
0

我有一个代表公司的JPA实体。它有一个代表公司网站URL的字段。我需要在持续之前验证该网址是否为有效的网站网址。我想只有以http或https开头的网址才是有效的网站网址。我如何执行此操作?我正在使用最新版本。 Hibernate的版本作为我的JPA提供者。如何验证JPA实体的网站URL字段?

+0

为了更好的说明:JPA注释在数据(模型)上。验证的实时效果应该在GUI层上看到。必须连接两者。最好的是使用完整的框架(Web应用程序的Web框架),而不是'手动'代码, –

+0

JPA与Bean验证无关。这是Bean验证API –

回答

0

看看Hibernate Validator的@URL注释。

+0

谢谢。这意味着我需要将网站URL字段表示为'String'而不是'java.net.URL'。我想这是可以的。但是,如何指定多个协议,如'http'和'https'。 '@URL''协议''属性只需要一个'String'。不要以为我应该允许使用'file','ftp'等协议。 – user247123

1

@dimitrisli建议你一个正确的解决方案。您应该使用@URL约束。如果你想允许特定的协议 - 有此约束属性:

@URL(protocol = "http") 
private String companyUrl; 

另外也有一个regexp属性,你可以用它让你的网址,以符合您想要的任何图案。

@URL(regexp = "^(http|ftp)") 
    private String companyUrl; 

您可以检查在doc更多详细资料(寻找在链接的部分URL)。

此外,如果你想使用URL而不是字符串,你可以写自己的验证实施URL类和URL约束,但要注意,如果你想尝试创建一个无效的URL在创建过程中会失败而不是经过验证。因此,编写一个验证器URL可能是有意义的,只有当你想检查协议和类似的东西。

为了编写自己的验证,你需要实现

public class URLValidator implements ConstraintValidator<org.hibernate.validator.constraints.URL, URL> { 
... 
} 

了解更多详情请查看this博客文章。

+0

正则表达式不适用于我。如果我使用regexp =“^(http | https)”对URL验证程序验证https://www.google.com,则验证失败。 – user247123

+0

正确...这是因为它试图将该表达式匹配到“String”值,而在您的情况下,它不是以协议开始。 .. 但它是一个有效的URL,但? (我的意思是如果它没有协议) –

+0

我想通了。这是因为正则表达式匹配整个字符串,而不仅仅是同类字符串的出现。我需要添加。*,使得regexp =“^(http | https)。*” – user247123