Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RESTWebService不支持';无法接收Android HttpPost参数_Java_Android_Web Services_Http Post - Fatal编程技术网

Java RESTWebService不支持';无法接收Android HttpPost参数

Java RESTWebService不支持';无法接收Android HttpPost参数,java,android,web-services,http-post,Java,Android,Web Services,Http Post,我有一个Web服务,它接收2个(可选)参数: <resource path="getLogbookEvents"> <method name="POST"> <request> <param name="startDate" style="query" type="xs:string"/> <param name="endDate" style="query" type="xs:string"/

我有一个Web服务,它接收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并从中接收答案,但web服务从未接收到这两个参数中的任何一个

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();
HttpClient-HttpClient=newdefaulthttpclient();
HttpPost=新的HttpPost(“http://... 方法(URL…);
//setHeader(“媒体类型”,“应用程序/json;字符集=UTF-8”);
ArrayList nameValuePairs=新的ArrayList();
名称值对。添加(新的基本名称值对(“起始日期”,“2014-04-18T05:00:00”);
名称值对。添加(新的基本名称值对(“结束日期”,“2014-04-18T06:00:00”);
UrlEncodedFormEntity实体=新的UrlEncodedFormEntity(nameValuePairs);
//setContentEncoding(HTTP.UTF_8);
后设实体(实体);
//向给定URL发出POST请求
HttpResponse HttpResponse=httpclient.execute(post);
//作为inputStream接收响应
inputStream=httpResponse.getEntity().getContent();

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

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

  • 使用proxy查看手机发送的数据
  • 使用易于使用的http LIB,例如

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

我终于设法让它工作起来了

所以,首先,Web服务肯定有问题。 我不确定到底是什么,修复它也不关我的事,所以我甚至都不想去确定它是什么

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

我不知道他们是如何让POST方法表现得像GET方法一样的,但从目前的情况看,他们显然是这样做的。在UTF-8中格式化我的nameValuePairs并将它们添加到URL中是我使其工作的方法(完全是反向的,一点也不推荐):

ArrayList nameValuePairs=新的ArrayList();
名称值对。添加(新的基本名称值对(“起始日期”,“2014-04-18T05:00:00”);
名称值对。添加(新的基本名称值对(“结束日期”,“2014-04-18T06:00:00”);
String paramString=URLEncodedUtils.format(nameValuePairs,“utf-8”);
HttpPost=新的HttpPost(“…基本URL字符串…”+参数字符串);

检查startdate和enddate字段结构中的数据库。startdate和enddate结构绝对正确。如果我使用与SoapUI相同的值请求数据,我会得到正确的数据。但是为什么要在webservice api中键入type=“xs:string”。。。您可以以日期格式获取开始和结束日期。遗憾的是,我实际上无法编辑Web服务。如果需要的话,我可以尝试让负责人对其进行更改,但由于它需要一个字符串,并且字符串作为参数发送,因此我没有收到值的问题不应该与没有指定为日期的值有关。今天下午我将看看这是否有帮助。但是,既然我已经得到了答案,用我现在的方式指定参数应该是完全可能的。这真的开始让我生气了,因为我不知道出了什么问题。
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);