【问题标题】:Best practice for validating a URL with Spring-MVC?使用 Spring-MVC 验证 URL 的最佳实践?
【发布时间】:2020-12-02 17:28:43
【问题描述】:

我正在为我的 Web 应用程序使用 Spring MVC。 我需要验证用户输入的 URL 是否有效,并且想知道 Spring 中是否有可以为我做基本检查的东西(例如以 http/https 开头,有域名等)。

ValidationUtils 只包含非常基本的检查,我知道我可以在 validate() 方法中编写一个正则表达式,但是如果有人已经这样做了,我更愿意避免它:)

谢谢

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    过去,我一直使用Hibernate Validator。只需使用 @URL 约束在表单 bean 中注释适当的字段。

    如果您以前从未使用过 Hibernate 的 ORM 部分,请不要害怕。 Validator 部分不依赖于 ORM 的东西,将其集成到 Spring 中是 very straightforward

    如果由于某种原因您不能使用 Hibernate Validator... 或者您只想坚持自己喜欢的东西,那么 RegExLib.com 是一个使用正则表达式的好地方;几种可以匹配 URI are listed there 的模式。

    【讨论】:

    • 所以基本上你的意思是,Spring 没有 URL 验证器。如果我们不使用 Hibernate 而是使用 MyBatis 会怎样?
    【解决方案2】:

    最终使用了来自 apache commonsUrlValidator

    【讨论】:

    • 这不是 spring mvc 解决方案。
    【解决方案3】:

    我知道这个问题已经很老了,但我只需要同样的问题,我想我会使用 SpringFramework 中的 PropertyEditors

    更准确地说,有 URLEditor,您可以使用它来将字符串表示形式转换为实际的 URL 对象。

    以下是相应文档的链接:

    http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-beans-conversion

    http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/propertyeditors/URLEditor.html

    就我而言,我考虑在 Spring Validator 中使用以下代码来检查用户输入的字符串是否为有效 URL:

    try {
        PropertyEditor urlEditor = new URLEditor();
        urlEditor.setAsText(field.getValue());
    } catch (IllegalArgumentException ex) {
        errors.rejectValue("nameOfTheFieldToBeValidated", "url_is_invalid");
    }
    

    但是,就目前而言,我不确定是否可以配置哪个协议将被接受为有效(即 URLEditor 似乎也接受以“类路径:”开头的 URL)

    【讨论】:

    • 好的,只是告诉你,我也使用来自 apache commons 的 UrlValidator。
    【解决方案4】:

    【讨论】:

    • 据我了解 Spring 拦截器允许您修改 HttpRequest 和 HttpResponse。当然,您可以在那里应用 URL 有效性检查,但如果是这种情况,我更喜欢使用 Validator 界面。我的问题更多是关于 Spring 中是否有一些东西可以为我验证 URL 而不是我使用凌乱的正则表达式。上面显示了像“The Awnry Bear”这样的东西,Hibernate 只有纯 Spring。
    • 这真的很糟糕,这是对弹簧拦截器的滥用,这不是它的用例。
    猜你喜欢
    • 2013-10-06
    • 2014-01-03
    • 2023-03-12
    • 2015-09-11
    • 1970-01-01
    • 2015-04-19
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多