从其他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()不是问题。
答案 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><