【问题标题】:REST webservice doesn't receive Android HttpPost parametersREST 网络服务不接收 Android HttpPost 参数
【发布时间】:2014-04-18 09:39:25
【问题描述】:

我有一个接收 2 个(可选)参数的网络服务:

<resource path="getLogbookEvents">
   <method name="POST">
     <request>
        <param name="startDate" style="query" type="xs:string"/>
        <param name="endDate" style="query" type="xs:string"/>
     </request>
     <response>
        <representation mediaType="application/json"/>
     </response>
   </method>
</resource>

我能够使用 HttpPost 连接并接收来自 Android 的答复,但网络服务从未接收到这两个参数中的任何一个。

HttpClient httpclient = new DefaultHttpClient();
HttpPost post = new HttpPost("http://... method URL ...");
//post.setHeader("media-type", "application/json; charset=UTF-8");

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("startDate", "2014-04-18T05:00:00"));
nameValuePairs.add(new BasicNameValuePair("endDate", "2014-04-18T06:00:00"));

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nameValuePairs);

// entity.setContentEncoding(HTTP.UTF_8);
post.setEntity(entity);

// make POST request to the given URL
HttpResponse httpResponse = httpclient.execute(post);

// receive response as inputStream
inputStream = httpResponse.getEntity().getContent();

我尝试了 HttpParams、JSONObject 和 nameValuePairs,但没有任何效果。我只是一直收到响应,就好像我没有指定任何参数一样。关于为什么会发生这种情况或我可以尝试获得获胜组合的其他任何想法?

【问题讨论】:

  • 在 startdate 和 enddate 字段结构中检查数据库..
  • startdate 和 enddate 结构绝对正确。如果我使用与 SoapUI 相同的值请求它,我会得到正确的数据。
  • 但是为什么你在 webservice api 的 type="xs:string" 中输入字符串...你可以得到日期格式的开始和结束日期。
  • 在 webservice api 中使用 type="xs:dateTime"
  • 很遗憾,我实际上无法编辑网络服务。如果需要,我可以尝试让负责更改它的人,但是看到它期望一个字符串并且一个字符串作为参数发送,我没有收到值的问题不应该与没有指定为日期的值有关.

标签: java android web-services http-post


【解决方案1】:

不是直接的答案,从未直接使用过 httpclient,但您可以调试/修复此问题:

  • 使用代理并查看您的手机真正发送了哪些数据
  • 使用易于使用的http库,例如http-request
  • retrofit

去http请求。它使用起来非常简单。相信我。

【讨论】:

  • 今天下午我会看看这是否有帮助。但是由于我已经得到了答案,所以完全可以按照我现在的方式来指定参数。这真的让我很生气,因为我不知道出了什么问题。
【解决方案2】:

我终于设法让它工作了。

所以,首先,Web 服务肯定有问题。 我不确定是什么,而且修复它不是我的事,所以我什至不打算尝试找出它是什么。

基本上,getLogbookEvents 没有接收参数,因为它不会接受请求正文中的任何参数,句号。查看正在发送的 SoapUI 原始数据,我发现它总是在 URL 内发送参数,而不是正文...

我不知道他们如何让 POST 方法表现得像 GET 方法,但就目前而言,他们显然是这样做的。用 UTF-8 格式化我的 nameValuePairs 并将它们添加到 URL 是我让它工作的(完全倒退,根本不推荐)方式:)

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("startDate", "2014-04-18T05:00:00"));
nameValuePairs.add(new BasicNameValuePair("endDate", "2014-04-18T06:00:00"));

String paramString = URLEncodedUtils.format(nameValuePairs, "utf-8");
HttpPost post = new HttpPost("... basic URL String ..." + paramString);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 2012-05-03
    • 2015-06-09
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多