1

HEAD リクエストを自分で処理するために w WS 呼び出しを行う必要があります。とにかく、リダイレクト後に常に応答を取得します (つまり、最終的には常に 301 ではなく 200 ステータスを取得します)。

ドキュメントにws.followRedirects=falseは、application.conf に設定する必要があると書かれていますが、とにかくうまくいかないようです。Scala バージョンがこの構成を読み取ろうとしていることがわかりますが、Java コントローラーがあります。また、今は 2.1 に切り替えることもできません。私が見ることができるように、この問題には特別なセッターがあります。

回避策はありますか?

4

1 に答える 1

1

Java から Scala を呼び出すことができます。このメソッドwsHeadは Scala コードをカプセル化し、Java Play API からオブジェクトのみを配信します。Play 2.1.0 に移行すると、そのメソッドをリファクタリングできます。

package controllers;

import play.api.libs.ws.Response;
import play.api.libs.ws.WS$;
import play.libs.F;
import play.libs.WS;
import play.mvc.*;

public class Application extends Controller {

    public static Result index() {
        final String url = "http://localhost:80";
        final F.Promise<WS.Response> responsePromise = wsHead(url);
        return async(responsePromise.map(new F.Function<WS.Response, Result>() {
            @Override
            public Result apply(WS.Response response) throws Throwable {
                return ok("got status: " + response.getStatus());
            }
        }));
    }

    private static F.Promise<WS.Response> wsHead(String url) {
        return new F.Promise(WS$.MODULE$.url(url).head()).map(new F.Function<Response, WS.Response>() {
            @Override
            public WS.Response apply(Response o) throws Throwable {
                return new WS.Response(o.getAHCResponse());
            }
        });
    }
}

application.confに追加する必要がありws.followRedirects=falseます。

于 2013-02-27T14:57:31.660 に答える