我正在尝试使用play.api.libs.ws.WS执行帖子,但我无法理解 如何设置params,我的代码:
Promise<Response> promise = WS.url(Play.application().configuration()
.getString("sms.service.url")).post();
.post 需要(T body,play.api.http.Writeable wrt,play.api.http.ContentTypeOf ct) 但我不明白我应该如何通过那里的参数。 该文档仅说明:
Promise<WS.Response> result = WS.url("http://localhost:9001").post("content");
如何设置内容,例如。 param1 = foo 和 param2 = bar ?
答案 0 :(得分:10)
尝试构建这样的请求:
WS.url("http://localhost:9001")
.setQueryParameter("param1", "foo")
.setQueryParameter("param2", "bar")
.post("content");
方法url(java.lang.String url)
会返回WS.WSRequestHolder
引用,该引用可用于使用setQueryParameter
的链式调用来修改原始请求。
答案 1 :(得分:5)
嗯,我想我应该开始看进口了!
我不小心使用了导入play.api.libs.ws.WS而不是import play.libs.WS; 使用 play.libs.WS 时,所有方法(如post(String string)和setContentType(String string))都会显示出来。我就这样做了:
import play.Play;
import play.libs.F;
import play.libs.WS;
public static Result wsAction() {
return async(
play.libs.WS.url(Play.application().configuration()
.getString("sms.service.url"))
.setContentType("application/x-www-form-urlencoded; charset=utf-8")
.post("param1=foo¶m2=bar").map(
new F.Function<WS.Response, Result>() {
public Result apply(WS.Response response) {
return ok(response.toString());
}
}
)
);
}
答案 2 :(得分:4)
接受的答案是错误的,或者至少是误导性的。代码
WS.url("http://localhost:9001")
.setQueryParameter("param1", "foo")
.setQueryParameter("param2", "bar")
.post("content");
会将字符串content
发布到http://localhost:9001/?param1=foo¶m2=bar
,这几乎肯定不是OP想要的。更有可能工作的是
WS.url("http://localhost:9001")
.post(Map("param1" -> Seq("foo"),
"param2" -> Seq("bar")))
将表单 param1=foo¶m2=bar
发布到网址http://localhost:9001
,这通常是服务器所需的内容。
答案 3 :(得分:1)
WS.url(url)
.setContentType("application/x-www-form-urlencoded")
.post("param1=foo¶m2=bar");
此方法使用HTTP POST方法发送其表单请求。从Play的官方文档中可以看出,您应该已经了解了GET方法。
这种方式是使用交方式提交表单请求,见于游戏的官方文档,获取方式的你应该已经知道了。
答案 4 :(得分:1)
您需要传递可以转换为序列化JSON的内容。这对我有用:
WS.url("https://www.someurl.com")
.post(JsObject(Seq("theString" -> JsString(someString))))
该序列采用任意数量的JsValues,它们也可以嵌套JsObjects。
答案 5 :(得分:0)
对我来说是最好的方式
WS.url("http://localhost:9001")
.post(Json.toJson(ImmutableMap.of("param1", "foo", "param2", "bar")));
的地图
http://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplained
答案 6 :(得分:-2)
在游戏2.1中执行阻止请求的正确方法是
WSRequestHolder wsreqHolder = WS.url("<SOME URL WHICH TAKES PARAMETER>");
wsreqHolder.setQueryParameter("id", "100");
F.Promise<WS.Response> promiseOfResult = wsreqHolder.get();
WS.Response response = promiseOfResult.get(); //block here
String jsonData = response.getBody();
return ok("Client:"+jsonData);
我试过了。它的工作原理