Play 2.0.4:有没有机会在Java控制器的WS.Response中将followRedirects设置为false?

时间:2013-02-26 15:53:43

标签: java playframework-2.0

我需要自己做WS调用来处理HEAD请求,无论如何它总是在重定向后得到响应(所以最后我总是得到200状态而不是ie .301)

在文档中写了我应该在我的application.conf中设置ws.followRedirects=false,无论如何它似乎不起作用。我可以看到Scala版本正在尝试读取此配置,但是我有一个Java控制器。现在也无法切换到2.1,我可以看到这个问题有特殊的设置器。

有任何解决方法吗?

1 个答案:

答案 0 :(得分: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