java - 玩框架 URL validator ?

标签 java validation url playframework-2.0

URL来自Play Framework 2中的form,我想检查URL是否真的存在。

所以看起来它可以通过结合两种方法来完成。

模型中是否有使用注解的内置类似功能?

How to create a custom validator in Play Framework 2.0?

How to check if a URL exists or returns 404 with Java?

编辑:对于赏金,您可以提供 URL validator 的实现(非内置)。

最佳答案

基本上,您需要对目标 URL 执行 HTTP HEAD 请求,并检查您是否获得了可接受的响应代码。可接受的响应代码可能是 OK (200)、暂时移动 (???) 和其他代码,如果不是现在,至少很快会导致页面。

为什么是HEAD?因为 GET 将下载整个页面,而 HEAD 将仅下载 HTTP header 。这将花费更少的时间,在这种情况下时间不是 friend 。 验证应该很快完成,而发出 HTTP 请求需要时间。在那几秒钟(或更多,取决于服务器和网络负载)期间,用户会想知道发生了什么并感到沮丧。除非您可以显示其中一个动画进度指示器让他知道验证其输入需要一些时间。

您应该像那些密码强度 validator 一样执行此操作,在这些密码强度 validator 中,一旦焦点离开输入控件,就会在后台 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;
    }
}

关于java - 玩框架 URL validator ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19267856/

相关文章:

c# - 为什么在设置 DataContext 时我的验证规则没有运行?

php - 基于多个 GET 变量的动态查询(Refine Search Form)

java - 方法文档

java - 带有 Apache CXF 和自定义 header 的 WebService

java - AssertJ 将提取的字段转换为 Map

node.js - 使用 Joi (Node.js) 中的外部函数进行验证

java - 在哪里捕获和处理空参数?

c# - 我们可以在 MonoRail 中的不同操作上使用带扩展和不带扩展吗?

java - 在 java 中执行 javascript - 打开 URL 并获取链接

java - Mockito 中的条件 stub 给定多个方法的调用顺序