我已经构建了一个API,您可以在其中注册回调网址。
使用Apache UrlValidator类验证URL。
我现在必须添加一项功能,允许在配置的URL中添加占位符。
https:/foo.com/${placeholder1}/bar/${placeholder2}
这些占位符将使用Apache StrSubstitutor或类似的东西动态替换。
现在我的问题,如何使用占位符验证网址?
我想到了一个解决方案:
我对此解决方案的问题是Apache UrlValidator只返回一个布尔值,因此错误消息将非常模糊。
除了创建自己的正则表达式之外还有其他解决方案吗?
更新:在评论中进行讨论后
允许的占位符数量有限。
将替换占位符的字符串格式也是已知的。
第一个目标是能够检查最终包含占位符的给定URL在配置时是否有效。
第二个目标是,如果URL无效,则返回一条可理解的错误消息。
有多种错误情况:
答案 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
等),但这相当于广泛的讨论。