2016-02-16 1 views
0

У меня очень простое приложение Scala Play, где я хочу поиграть с WS library.Проблема с Scala Play WS API: выражение типа WSRequestHolder не соответствует типу WSRequest

Я только хочу, чтобы воспроизвести простой пример:

val request: WSRequest = WS.client 
    .url(s"https://www.instagram.com/explore/tags/gibtsnicht") 
    .withRequestTimeout(40000) // * 
val futureResponse: Future[WSResponse] = request.get() // ** 

Но это не компилируется.

Он говорит:

*: Expression of type WSRequestHolder doesn't conform to type WSRequest

**: Cannot resolve symbol get

Я добавил ws в моих зависимостей в build.sbt и отрегулированы Application.scala как так (как описано в docs):

class Application @Inject() (ws: WSClient) extends Controller { 

Однако это не работает ни потому, что Inject не найден. Импорт import javax.inject._ не помогает. Кто-нибудь знает, где я ошибаюсь?

ответ

1

Это:

val request: WSRequest = WS.client 
    .url(s"https://www.instagram.com/explore/tags/gibtsnicht") 
    .withRequestTimeout(40000) 

Должно быть

val request: WSRequest = ws.url(s"https://www.instagram.com/explore/tags/gibtsnicht") 
    .withRequestTimeout(40000) 
+0

Обратный тип неправильный. Это должен быть WSRequestHolder, а не WSRequest – kliew

+0

Правильный тип возврата. Вы можете подтвердить это здесь: https://www.playframework.com/documentation/2.4.x/api/scala/index.html#play.api.libs.ws.WSClient и https://www.playframework.com/ документация/2.4.x/api/scala/index.html # play.api.libs.ws.WSRequest –

0

play.api.libs.ws.WS является объектом Singleton, который возвращает WSRequestHolder при вызове метода url. https://www.playframework.com/documentation/2.0/api/scala/play/api/libs/ws/WS $ .html

ie.

import play.api.libs.ws.WS 

val request: WSRequestHolder = WS.url(s"https://www.instagram.com/explore/tags/gibtsnicht") 
    .withRequestTimeout(40000) 
+0

nburk использует инъецированный контроллер, которых не было в Play Framework 2.0. –