【发布时间】:2014-04-12 19:04:05
【问题描述】:
我在 Java 中使用 play 框架。 我想检索在 POST 请求中发送到播放服务器的整个请求正文。我怎样才能找回它?
【问题讨论】:
标签: java post playframework playframework-2.0
我在 Java 中使用 play 框架。 我想检索在 POST 请求中发送到播放服务器的整个请求正文。我怎样才能找回它?
【问题讨论】:
标签: java post playframework playframework-2.0
看看play.mvc.Http 类,你有一些选项(取决于数据格式),即
RequestBody body = request().body();
MultipartFormData formData = request().body().asMultipartFormData();
Map<String, String[]> params = request().body().asFormUrlEncoded();
JsonNode json = request().body().asJson();
String bodyText = request().body().asText();
您可以测试request().body().asText(),即从命令行使用 cUrl:
curl -H "Content-Type: text/plain" -d 'Hello world !' http://domain.com/your-post-action
...或者使用一些工具,比如浏览器插件:https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo
【讨论】:
String bodyText = request().body().asText();
使用 Play Framework 2.3,即使 Content-Type 标头是 application/json,也可以获得原始 json 文本
def postMethod = Action(parse.tolerantText) { request =>
val txt = request.body
}
【讨论】:
如果您在请求中调用以下代码;
String bodyText = request().body().asText();
如果 Content-Type 标头是 application/json,bodyText 将为 null
如果 Content-Type 标头是 application/json 而不首先转换为 JsonNode,则无法使用提供的控制器 API 来获取 JSON 文本
因此,如果 application/json 是您的 Content-Type 标头,那么最好的方法是
String bodyText = request().body().asJSON().toString();
这是播放框架的失败,因为无论 Content-Type 标头是什么,它们都应该只有一种方法可以将请求正文作为字符串获取。
【讨论】:
它将请求 JSON 正文作为字符串。我在 play 2.6.x 上测试过val body = request.body.asJson.get.toString()
【讨论】: