【问题标题】:codenameone REST API POST request body代号一个 REST API POST 请求正文
【发布时间】:2017-04-15 06:35:04
【问题描述】:

我正在尝试从 AWS API Gateway 上的 REST API 调用 POST 方法。使用 curl(用于 POST)从命令行正确调用 API,使用 GET 浏览器正确调用 API,所以我知道它工作正常,但我似乎不能找到使用 ConnectionRequest 类在代号一上调用 POST 方法的正确方法,阅读文档 theres addArgument() 和 setRequestBody() 他们说,它们是排他性的,所以我都尝试了,但我的结果是:

  • setRequestBody() :似乎它没有向请求发送任何内容,尝试发送我在 curl 上发送的相同 JSON requestBody,API 响应但 requestBody 是“未定义”(检查 AWS API Gateway 日志),也尝试过request.addRequestHeader("test", "test");同样,标头在 AWS 日志中是“未定义的”,但在命令行上调用 API 时会显示。
  • addArgument():API 返回“400 bad request”。

我正在使用 request.setPost(true); 但也有 setHttpMethod(String value);所以我不确定我是否做得对。

调用 POST REST 并向其发送参数的正确方法是什么?有没有办法调试正在发送的请求?像打印等效的 CURL 调用或类似的东西?或者有什么方法可以直接在 CN1 上执行 CURL 请求?

【问题讨论】:

    标签: java rest http mobile codenameone


    【解决方案1】:

    这与分段上传并不完全相同,但我正在使用 AWS upload code here,如果您更新问题(并在下面发表评论),我可以在 Codename One 中包含执行确切 curl 请求的代码。

    至于调用setPost(true) 的问题就足够了,因为它会隐式设置post 方法。如果您想做PUT 之类的操作,http 方法很有用。

    选择请求正文与参数取决于您的请求类型。

    【讨论】:

    • 谢谢 Shai,已经更新了“选择请求与参数”的问题,因为它是一个 POST,我认为正确的方法是使用请求正文,但是在尝试它并检查登录时AWS方面,它被接收为“未定义”,如果我在curl上执行相同的请求,使用相同的请求正文,它会成功接收,所以谷歌搜索这个案例在Stack Overflow上发现了另一个问题,你在POST上提到了你可以也使用 addArgument() ,尝试过但返回“错误请求”,所以它们都不适合我,我错过了什么吗?
    • 我找到了我丢失的东西,它是对 setContentType() 的调用,现在它通过 setRequestBody 工作
    【解决方案2】:

    回答我的问题,在 Shai Almong 的帮助和一些测试之后,它的正确方法(我缺少 setContentType 调用):

    setPost(true);
    setContentType('application/json');
    setRequestBody("parameters in json format");
    

    【讨论】:

      猜你喜欢
      • 2017-03-26
      • 1970-01-01
      • 2018-07-14
      • 2018-08-04
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      • 2019-12-28
      相关资源
      最近更新 更多