2013-02-26 35 views
1

我需要W¯¯WS調用由我自己來處理HEAD請求,反正總是能得到的迴應發生重定向後(所以最後我總是得到200個狀態,而不是即301)玩2.0.4:任何機會在Java控制器中的WS.Response中設置followRedirects爲false?

在文檔這是寫,我應該設置ws.followRedirects=false在我的application.conf中,無論如何,它似乎沒有工作。我可以看到Scala版本試圖讀取這個配置,但是我有一個Java控制器。現在也不能切換到2.1,因爲我可以看到這個問題有特殊的設置。

是否有任何解決方法?

+1

您是否試過用Scala控制器?在2.0.4中,您可以混合使用而不會出現問題。 – 2013-02-27 10:50:59

+0

不幸的是,我沒有斯卡拉的經驗,如果沒有其他選擇,我會這樣做。 – biesior 2013-02-27 10:57:04

+0

那麼現在是時候學習Scala;)對不起,不知道問題可能是什麼。 – 2013-02-27 11:17:13

回答

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

+0

謝謝你的樣本,無論如何爲了我的可憐的斯卡拉知識的目的,它將更容易將動作移動到Scala控制器,而不是混合Scala和Java;)(至少對我來說) – biesior 2013-02-27 20:41:48

相關問題