URL 来自 Play Framework 2 中的表单。我想检查 URL 是否真的存在。
所以似乎可以通过结合两种方法来完成。
在模型中是否有使用注释的内置类似功能?
如何在 Play Framework 2.0 中创建自定义验证器?
编辑:对于赏金,您可以提供 URL 验证器的实现(不是内置的)。
URL 来自 Play Framework 2 中的表单。我想检查 URL 是否真的存在。
所以似乎可以通过结合两种方法来完成。
在模型中是否有使用注释的内置类似功能?
如何在 Play Framework 2.0 中创建自定义验证器?
编辑:对于赏金,您可以提供 URL 验证器的实现(不是内置的)。
基本上,您需要对目标 URL 执行 HTTPHEAD
请求并检查您是否获得了可接受的响应代码。可接受的响应代码可能是 OK (200)、暂时移动 (???) 和其他将导致页面的代码,如果不是现在至少很快。
为什么HEAD
?因为GET
将下载整个页面并且HEAD
只会下载 HTTP 标头。在这种情况下,这将花费更少的时间和时间不是朋友。验证应该很快完成,并且发出 HTTP 请求需要时间。在这几秒钟内(或更多,取决于服务器和网络负载),用户会想知道发生了什么并感到沮丧。除非您可以显示其中一个动画进度指示器,让他知道验证其输入需要一些时间。
您应该像那些密码强度验证器那样执行此操作,一旦焦点离开输入控件并且在显示结果的一侧有一个动画指示器,就会在后台 AJAX 调用中验证值。同时用户可以填写其他信息。
代码将是这样的:
public class UrlExistenceValidator ... {
public boolean isValid(Object object) {
if (!(object instanceof String)) {
return false;
}
final String urlString = (String) object;
final URL url = new URL(urlString);
final HttpURLConnection huc = (HttpURLConnection) url.openConnection();
huc.setRequestMethod("HEAD");
huc.connect();
final int code = huc.getResponseCode();
return code != 404;
}
}