使用 Java 播放发送 HTTP 请求(WSClient 初始化)
Sending HTTP request with Java Play (WSClient initialization)
我从官方 Play 2.6 文档中获取了以下代码,这些代码定义了客户端 class、
import javax.inject.Inject;
import play.libs.ws.*;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.CompletionStage;
public class MyClient implements WSBodyReadables, WSBodyWritables {
private WSClient ws;
@Inject
public MyClient(WSClient ws) {
this.ws = ws;
sendRequest();
}
public void sendRequest() {
WSRequest request = ws.url("http://example.com");
WSRequest complexRequest = request.addHeader("headerKey", "headerValue")
.setRequestTimeout(Duration.of(1000, ChronoUnit.MILLIS))
.addQueryParameter("paramKey", "paramValue");
CompletionStage<? extends WSResponse> responsePromise = complexRequest.get();
}
}
现在我有了一个处理传入套接字消息的套接字参与者。我想在每次新消息通过套接字时触发 HTTP 请求。
我的问题是我不知道如何初始化 MyClient class 以使用它的 sendRequest 方法。
public void onReceive(Object message) throws Exception {
if (message instanceof String) {
out.tell("I received your message: " + message, self());
MyClient a = new MyClient(); //problem here
}
}
你必须注入它,就像你在MyClass
中做的那样:
public class MyActor extends UntypedAbstractActor {
private MyClient client;
@Inject
public MyActor(MyClient client) {
this.client = client;
}
@Override
public void onReceive(Object message) throws Exception {
client.sendRequest();
}
}
如果有一些问题不允许您使用它(例如您不控制 actor 的创建方式),请在您的问题中添加更多信息。
我从官方 Play 2.6 文档中获取了以下代码,这些代码定义了客户端 class、
import javax.inject.Inject;
import play.libs.ws.*;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.CompletionStage;
public class MyClient implements WSBodyReadables, WSBodyWritables {
private WSClient ws;
@Inject
public MyClient(WSClient ws) {
this.ws = ws;
sendRequest();
}
public void sendRequest() {
WSRequest request = ws.url("http://example.com");
WSRequest complexRequest = request.addHeader("headerKey", "headerValue")
.setRequestTimeout(Duration.of(1000, ChronoUnit.MILLIS))
.addQueryParameter("paramKey", "paramValue");
CompletionStage<? extends WSResponse> responsePromise = complexRequest.get();
}
}
现在我有了一个处理传入套接字消息的套接字参与者。我想在每次新消息通过套接字时触发 HTTP 请求。
我的问题是我不知道如何初始化 MyClient class 以使用它的 sendRequest 方法。
public void onReceive(Object message) throws Exception {
if (message instanceof String) {
out.tell("I received your message: " + message, self());
MyClient a = new MyClient(); //problem here
}
}
你必须注入它,就像你在MyClass
中做的那样:
public class MyActor extends UntypedAbstractActor {
private MyClient client;
@Inject
public MyActor(MyClient client) {
this.client = client;
}
@Override
public void onReceive(Object message) throws Exception {
client.sendRequest();
}
}
如果有一些问题不允许您使用它(例如您不控制 actor 的创建方式),请在您的问题中添加更多信息。