使用占位符进行Java URL验证

时间:2018-01-31 15:50:18

标签: java regex validation url

我已经构建了一个API,您可以在其中注册回调网址。

使用Apache UrlValidator类验证URL。

我现在必须添加一项功能,允许在配置的URL中添加占位符。

https:/foo.com/${placeholder1}/bar/${placeholder2}

这些占位符将使用Apache StrSubstitutor或类似的东西动态替换。

现在我的问题,如何使用占位符验证网址?

我想到了一个解决方案:

  • 我用示例值
  • 替换了预期的占位符
  • 然后我使用Apache UrlValidator
  • 验证URL

我对此解决方案的问题是Apache UrlValidator只返回一个布尔值,因此错误消息将非常模糊。

除了创建自己的正则表达式之外还有其他解决方案吗?

更新:在评论中进行讨论后

允许的占位符数量有限。

将替换占位符的字符串格式也是已知的。

第一个目标是能够检查最终包含占位符的给定URL在配置时是否有效。

第二个目标是,如果URL无效,则返回一条可理解的错误消息。

有多种错误情况:

  • 网址中使用的占位符不在允许的占位符列表中
  • 网址无效,独立于占位符

1 个答案:

答案 0 :(得分:1)

对于最小化的URL验证,您可以使用java.net.URL构造函数(它将与您的https:/foo.com/${placeholder1}/bar/${placeholder2}示例一起使用)。

根据docs,它会抛出:

  

MalformedURLException - 如果未指定协议,或找不到未知协议,或者规范为null。

然后,您可以利用URL方法作为奖励,获取部分内容,例如路径,协议等。

我肯定会建议不要使用regex重新发明轮子以进行URL验证。

请注意java.net.URI具有更严格的验证,并且会使您的示例使用占位符失败。

修改

正如所讨论的,由于您还需要验证占位符,您可能希望实际尝试先填充它们并在出现问题时快速失败,然后继续并针对java.net.URI验证填充的URL,用于严格验证。

一般警告

您可能还希望让您的生活更轻松,并利用现有的框架,允许您首先使用带注释的路径变量(例如Spring等),但这相当于广泛的讨论。