1

URL は Play Framework 2 のフォームから取得されます。URL が本当に存在するかどうかを確認したいと思います。

そのため、アプローチした2つを組み合わせることで実現できるようです。

モデルで注釈を使用する組み込みの同様の機能はありますか?

Play Framework 2.0 でカスタムバリデータを作成するには?

URLが存在するかどうか、またはJavaで404を返すかどうかを確認するにはどうすればよいですか?

編集: 報奨金の場合、URL バリデーターの実装を提供できます (組み込みではありません)。

4

1 に答える 1

4

基本的にHEADは、ターゲット URL に対して HTTP 要求を実行し、受け入れ可能な応答コードが得られたかどうかを確認する必要があります。受け入れ可能な応答コードは、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;
    }
}
于 2013-10-21T14:32:47.837 に答える