【问题标题】:setContentType("application/x-www-form-urlencoded") play framework 2.0.xsetContentType("application/x-www-form-urlencoded") 播放框架2.0.x
【发布时间】:2015-01-23 14:00:17
【问题描述】:

我正在尝试调用 Web 服务,但在播放框架 2.0.x 中我无法调用任何已编码的 Web 服务。

我查看了代码:

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&param2=bar").map(
            new F.Function<WS.Response, Result>() {
                public Result apply(WS.Response response) {
                   return ok(response.toString());
                }
            }
        )
    );
}

参考:https://stackoverflow.com/a/14938117/4410109

我已在 play framework 2.0.8 上尝试过上述代码,但出现此错误:

错误:找不到符号 .setContentType("application/x-www-form-urlencoded; charset=utf-8")

有没有办法在播放框架 2.0.8 中设置内容类型。 ?

谢谢

编辑

这是我的代码:

Promise<WS.Response> result2 = WS.url("desired-url")
            .setQueryParameter("sUsername","test")
            .setQueryParameter("sPwd","hbl@1234")
            .setQueryParameter("sMobileno","03332560744")
            .setQueryParameter("sTransaction_id","asdfasdfasdfasdfasdf")
            .setQueryParameter("sMessage","test")
            .post("content");

         WS.Response rs = result2.get();

它返回无效格式错误。而且我还使用 form-data 并使用相同的参数从 REST 客户端尝试过,它也返回相同的错误“格式无效”。但是当我用 x-www-form-urlencoded 尝试它时,它会返回所需的结果。但在播放 2.0 中我无法设置内容类型。

谢谢

【问题讨论】:

    标签: java web-services playframework playframework-2.0


    【解决方案1】:

    如果你 POSTMap[String, Seq[String]],内容类型将正确设置为 application/x-www-form-urlencoded

    .post(Map("param1" -> Seq("foo"), "param2" -> Seq("bar")))
    

    【讨论】:

      【解决方案2】:

      似乎“setContentType”方法从 2.1.0 开始可用。

      在 2.0.8 中你可以只设置标题

      public static Result wsAction() {
      return async(
          play.libs.WS.url(Play.application().configuration()
              .getString("sms.service.url"))
              .setHeader(Http.HeaderNames.CONTENT_TYPE, "application/x-www-form-urlencoded; charset=utf-8")                       
              .post("param1=foo&param2=bar").map(
                  new F.Function<WS.Response, Result>() {
                      public Result apply(WS.Response response) {
                         return ok(response.toString());
                      }
                  }
              )
          );
      }
      

      来自play! Doc的一些信息。

      【讨论】:

        【解决方案3】:

        在play 2.0中你可以做到

        response().setContentType("application/x-www-form-urlencoded; charset=utf-8");
        return ok(response.toString());
        

        【讨论】:

        • 非常感谢@singhakash 的快速回复。我会尝试并告诉你。
        • 我已经编辑了我的问题,请查看。并且 response().setContentType 不可用。 :(
        • @AbdulAleemAkhund 你试过WS.url("desired url").setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8l");
        • 是的,我有。但我不需要对标头进行编码。它实际上是被编码的参数。
        猜你喜欢
        • 1970-01-01
        • 2017-09-11
        • 1970-01-01
        • 1970-01-01
        • 2014-03-30
        • 1970-01-01
        • 2019-05-04
        • 2019-02-04
        • 1970-01-01
        相关资源
        最近更新 更多