在Play框架java中获取POST请求发送的请求体字符串

ntjbwcob  于 2023-03-06  发布在  Java
关注(0)|答案(5)|浏览(156)

我使用的是Java的play框架。我想检索POST请求中发送到play服务器的整个请求主体。我该如何检索?

flvlnr44

flvlnr441#

看一下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

2nc8po8w

2nc8po8w2#

使用Play Framework 2.3,即使内容类型头是application/json,也可以获得原始json文本

def postMethod = Action(parse.tolerantText) { request =>
    val txt = request.body
}
bnl4lu3b

bnl4lu3b3#

如果对请求调用以下代码;

String bodyText = request().body().asText();

如果内容类型标头为application/json,则bodyText将为空
如果Content-Type标头是application/json,则无法使用提供的控制器API仅获取JSON文本,而不首先转换为JsonNode
因此,如果application/json是您的Content-Type标头,最好的方法是

String bodyText = request().body().asJSON().toString();

这是play框架的一个失败,因为不管Content-Type头是什么,他们应该只使用一个方法来获取请求体作为String。

wz1wpwve

wz1wpwve4#

它会以字符串的形式给予请求JSON主体。我在play2.6.x上测试过
val body = request.body.asJson.get.toString()

von4xj4u

von4xj4u5#

请求主体().asBytes(). utf8字符串()

相关问题