1

Play 2.0 アプリケーション内で Web サービスを呼び出すのに問題があります。これが私のコードの外観です

Future<Object> promise = WS.url("http://myurl").get().map(testFunc1, null);
 Function1 testFunc1 = new Function1(){
    public void $init$() {}
    public Object apply(Object v1) {
        System.out.println("apply");
        return "";
    }
    public Function1 andThen(Function1 g) { return null; }
    public Function1 compose(Function1 g) {return null;}
};

しかし、私のIDEはコンパイル時の例外をスローしています

error: <anonymous MyClass$1> is not abstract and does not override abstract method andThen$mcVJ$sp(Function1) in Function1
     Function1 testFunc1 = new Function1(){

これらのパッケージをインポートしました

import play.api.libs.ws.WS;
import scala.Function1;
import scala.concurrent.Future;

明らかに、ここで何かが欠けているようです。誰か教えてください。それとも、Promise オブジェクトを Function1 にマップする必要がありますか?

ありがとうカーシック

4

1 に答える 1

2

コードは Java のように見えますが、Scala ライブラリを使用しています。このパッケージplay.apiは Scala API 用です。

使用する

import play.libs.WS;
import play.libs.F.Function

それ以外の

import play.api.libs.ws.WS;
import scala.Function1;

//checkout https://github.com/schleichardt/stackoverflow-answers/tree/so18491305
package controllers;

import play.libs.F.Function;
import play.libs.F.Promise;
import play.mvc.*;
import play.libs.WS;

public class Application extends Controller {
    /**
     * This action serves as proxy for the Google start page
     */
    public static Result index() {
        //Phase 1 get promise of the webservice request
        final Promise<WS.Response> responsePromise = WS.url("http://google.de").get();
        //phase 2 extract the usable data from the response
        final Promise<String> bodyPromise = responsePromise.map(new Function<WS.Response, String>() {
            @Override
            public String apply(WS.Response response) throws Throwable {
                final int statusCode = response.getStatus();
                return response.getBody();//assumed you checked the response code for 200
            }
        });
        //phase 3 transform the promise into a result/HTTP answer
        return async(
                bodyPromise.map(
                        new Function<String,Result>() {
                            public Result apply(String s) {
                                return ok(s).as("text/html");
                            }
                        }
                )
        );
    }
}
于 2013-08-28T20:48:11.250 に答える