使用uri中的NO参数从其余Web服务返回数据

时间:2011-11-08 01:00:57

标签: java rest servlets return inputstream

从其他Web服务返回String时遇到问题:

[WebInvoke(Method = "PUT", UriTemplate = "/Filters", 
BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
string CreateFilter(Filter InputFilter);

如您所见,URL没有任何参数,所有数据都通过流传递给URL。返回的字符串基于发送到URL的数据。

当我使用.net测试应用程序时,响应是正确的(基于输入)。

当我使用Java servlet时,当调用HttpURLRequest的GetInputStream()时,服务返回400错误。

似乎Java servlet再次调用URL并期望响应(因为它基于输入而不存在)。我通过将返回值更改为常量(因此不基于输入)来测试它。当我这样做时,我的GetInputStream()方法有效。

servlet代码:

OutputStream out = connection.getOutputStream();
out.write(jsonValue.getBytes());
out.close();

String response = "";


BufferedReader readResponse = 
new BufferedReader(new InputStreamReader(connection.getInputStream()));

response = readResponse.readLine();


return response;

注意:其他方法对带有参数的URL使用相同的代码,并返回正确的数据(添加证据表明servlet在我的问题方法中第二次调用URL。)另外out.close()不是问题。

1 个答案:

答案 0 :(得分:0)

解决。这最终成为Servlet发送的Json中的一个问题。当Web服务尝试使用一个特定的数据时,它会抛出并出错并且不会产生所需的返回字符串。

[{"Key":"1","Value":"one"},{"Key":"2","Value":"two"},{"Key":"3","Value":"three"}]

C#表示^^

{"3":"three","2":"two","1":"one"}

Java表示^^

字典vs HashMap><