استدعاء API Framework REST API

1

أنا جديد في إطار عمل Play ، وأحاول استخدام JavaWS لإجراء مكالمة إلى RESTful API. لقد عانيت كثيرًا من أجل ذلك. هذا ما لدي حتى الآن:

يعتمد هذا الرمز على وثائق JavaWS (التي وجدت أنها مربكة للغاية) ، ويقصد به تقديم الطلب. أعتقد أنه يعمل عن طريق استعادة مرحلة إكمال نتيجة "موافق" التي تحتوي على سلسلة تنتج عن تحويل الاستجابة إلى نص.

import javax.inject.Inject;

import com.fasterxml.jackson.databind.JsonNode;
import play.mvc.*;
import play.libs.ws.*;
import java.util.concurrent.*;

import static play.mvc.Results.ok;

public class MyClient implements WSBodyReadables, WSBodyWritables {
    private final WSClient ws;

    @Inject
    public MyClient() {
        this.ws = ws;
    }

    public CompletionStage<Result> index() {
        return ws.url("http://example.com").get().thenApply(response ->
                ok(response.asText())
        );
    }

}

ثم يتم استدعاء هذا الرمز من وحدة تحكم:

public Result call(){
    MyClient client = new MyClient();

    try {
        return client.index()
                .toCompletableFuture()
                .get();
    } catch(Exception e){
        Logger.error("ah fuck");
    }
    return internalServerError();
}

أتلقى حاليًا خطأً يقول "ربما لم تتم تهيئة ws المتغيرة" وهو أمر منطقي لأنني لم أقم بتهيئة ws. لا يمكنني معرفة كيفية تهيئة مثيل WSClient بشكل صحيح ، ولا أفهم حقًا ما يأتي بعد ذلك. أي مساعدة ستكون موضع تقدير كبير.

شكر.

2 الاجابة

0

rkj كان على حق:

inject @Inject WSClient ws; in your controller and then pass ws instance to >MyClient class and access it from there. MyClient client = new MyClient(this.ws);

هذا بالإضافة إلى بعض الأخطاء الصغيرة وعملت. شكر!

:مؤلف
0

بدلاً من ذلك ، يمكنك استخدام مكتبة Feign من Netflix لإنشاء عميل Rest.

:مؤلف
فوق
قائمة طعام