【问题标题】:Adding domain to UrlValidator in apache.commons在 apache.commons 中将域添加到 UrlValidator
【发布时间】:2025-11-28 20:55:01
【问题描述】:

所以我正在使用 UrlValidator (org.apache.commons.validator.routines.UrlValidator),我想知道是否有办法自定义它允许的域。现在它似乎只允许*域名,但我有一个或两个我想要有效的不在该列表中,例如“.corp”(列表可在此处找到:http://data.iana.org/TLD/tlds-alpha-by-domain.txt)。是否有设置或解决方法,因此我不必创建自己的 url 验证器,并且可以将其与添加的域一起使用?

【问题讨论】:

    标签: java apache url apache-commons url-validation


    【解决方案1】:

    您可以在下面找到一个 JUnit 测试用例。

    import org.apache.commons.validator.routines.DomainValidator;
    import org.apache.commons.validator.routines.UrlValidator;
    
    class UrlValidatorTestCase extends TestCase {
    
      private static final String[] GENERIC_TLDS_PLUS = new String[] { "corp" };
    
      static {
        DomainValidator.updateTLDOverride(DomainValidator.ArrayType.GENERIC_PLUS, GENERIC_TLDS_PLUS);
      }
    
      public void test_UrlValidator_isValid_corp_tld() {
        assertTrue(UrlValidator.getInstance().isValid("http://domainlabel.corp"));
      }
    }
    

    使用 commons-validator 1.6 测试

    【讨论】:

      【解决方案2】:

      我最终找到了一种可能的方法,但我没有使用或实施它。当 url 无效时,我将使用 DomainValidator (source) 将其放入另一个检查中。我计划使用 updateTLDOverride 方法,但他们在 v 1.5.0 中有一个错误,其中方法调用的参数使用私有或受保护变量。这在 1.5.1 中已修复,但我使用的是 Maven,并且 repo 仅适用于验证器的 1.5.0 版本。

      【讨论】: