【问题标题】:Retrieve the request body string sent in POST request in play framework java在play框架java中检索POST请求中发送的请求正文字符串
【发布时间】:2014-04-12 19:04:05
【问题描述】:

我在 Java 中使用 play 框架。 我想检索在 POST 请求中发送到播放服务器的整个请求正文。我怎样才能找回它?

【问题讨论】:

    标签: java post playframework playframework-2.0


    【解决方案1】:

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

    【讨论】:

    • 我想获取原始正文字符串而不将其转换为任何 java 特定的数据结构。我怎样才能做到这一点?
    • 你应该看看提到的类:P String bodyText = request().body().asText();
    • 我试过 String bodyText = request().body().asText(); .它返回 null :)
    • 显然您的帖子包含表单而不是纯文本,请尝试执行对操作的调用 - 即使用 Play 的 WS API 或 curl 来查看它是否有效;)
    【解决方案2】:

    使用 Play Framework 2.3,即使 Content-Type 标头是 application/json,也可以获得原始 json 文本

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

    【讨论】:

    【解决方案3】:

    如果您在请求中调用以下代码;

    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 标头是什么,它们都应该只有一种方法可以将请求正文作为字符串获取。

    【讨论】:

      【解决方案4】:

      它将请求 JSON 正文作为字符串。我在 play 2.6.x 上测试过
      val body = request.body.asJson.get.toString()

      【讨论】:

        猜你喜欢
        • 2019-03-13
        • 2014-07-19
        • 2014-09-26
        • 1970-01-01
        • 1970-01-01
        • 2011-03-20
        相关资源
        最近更新 更多