如何验证 JPA 实体的网站 URL 字段?

use*_*123 3 java validation hibernate bean-validation

我有一个代表公司的 JPA 实体。它有一个代表公司网站 URL 的字段。在持久化之前,我需要验证该 URL 是否是有效的网站 URL。我想只有以 http 或 https 开头的 URL 才是有效的网站 URL。我该如何强制执行?我用的是最新的。Hibernate 版本作为我的 JPA 提供程序。

小智 7

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

@URL(protocol = "http")
private String companyUrl;
Run Code Online (Sandbox Code Playgroud)

此外,还有一个regexp属性,您可以使用它来使您的 url 匹配您想要的任何模式。

    @URL(regexp = "^(http|ftp).*")
    private String companyUrl;
Run Code Online (Sandbox Code Playgroud)

您可以在文档中查看更多详细信息(在链接部分中查找 URL)。

此外,如果您想使用URL而不是字符串,您可以为URL类和URL约束编写自己的验证器实现,但请注意,如果您尝试创建一个无效的URL,它将在创建过程中失败,而不是在验证时失败。因此,URL仅当您想检查协议和类似内容时,编写验证器才有意义。

要编写自己的验证器,您需要实现

public class URLValidator implements ConstraintValidator<org.hibernate.validator.constraints.URL, URL> {
...
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看博客文章。

  • 我想到了。这是因为正则表达式匹配整个字符串而不仅仅是 sibstring 的出现。我需要添加 .* 使得正则表达式 = "^(http|https).*" (4认同)

dim*_*sli 0

看一下Hibernate Validator的@URL注释。