【发布时间】:2012-04-20 14:56:34
【问题描述】:
我在将数据发布到我的 REST WCF 服务时遇到了一些困难。我需要向它发送一个 json 对象/数组,但我的 POST 方法需要一个 Stream,然后将其分开以获取 JSON(无法更改这部分)。
我已经在 C# 中使用以下代码完成了这项工作:
public static string CallPostService(string url, string data)
{
url = Config.serviceAddress + url;
string json = data;
byte[] buffer = Encoding.UTF8.GetBytes(json);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
request.Credentials = new NetworkCredential("user", "pass");
request.ContentType = "application/x-www-form-urlencoded";
using (StreamWriter sw = new StreamWriter(request.GetRequestStream()))
{
sw.Write(json);
Console.WriteLine(json);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
string res = sr.ReadToEnd();
return res;
}
}
我需要一些等效的 Java 代码来执行此操作,最好使用 Apache HttpClient。我是 http 库的新手,所以我希望能得到一点指导。
编辑:
这是来自我的 WCF 服务的方法标头。请求正文需要是一个流,以便服务可以处理它。
[WebInvoke(Method = "POST", UriTemplate = "person/delete", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
Person DeletePerson(Stream streamdata) { //bla }
【问题讨论】:
-
你用java走了多远?
-
不确定你在问什么,但我实际上已经能够使用 HttpClient 执行 GET,只需要让 POST 工作。
-
post 的工作方式相同,你只需要给它一个实体(可以是很多不同的东西)
-
不,当方法需要流时不是。这就是关键,流。我的服务方法不只是期待一个 json 对象,(即“application/json”内容类型)他们期待一个流(“application/x-www-form-urlencoded”)
-
这可能就是 InputStreamEntity 的用途