使用HttpClient - Java发送带有HTTP POST请求的XML有效负载

时间:2013-07-01 20:49:16

标签: java http xmlhttprequest httpclient

所以我一直在做很多关于stackoverflow和google的尝试回答我的下面的问题,但是我找不到任何可以帮助我100%完成这项工作的东西。我很确定除了SMALL错误之外我还有其他一切,但显然你们可能还有建议,所以去吧!

而且,我们开始:我一直在使用HTTPClient在几个不同的环境中测试API,我使用HTTPPost方法接受JSON有效负载,但现在我正在尝试使用XML发送有效负载并且我正在运行陷入一些问题。似乎我正在创建的XML字符串(在下面的代码中)是正确的...所以我很难过为什么这不起作用。另外:从互联网获取大部分DOM代码(以构建XML有效负载),所以随时也可以提出问题......

我的代码如下:

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

Document doc = docBuilder.newDocument();
Element subscription = doc.createElement("subscription");
doc.appendChild(subscription);

subscription.setAttribute("email", "patricia@test.intershop.de");
etc....
etc....
etc....
etc....

DOMSource domSource = new DomSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(domSource, result);

String XMLpayload = writer.toString();

[name of my HttpRequest].setEntity(new StringEntity(XMLpayload));
[name of my HttpResponse] = client.execute(request);

现在......我正在寻找下面看到的有效载荷:

<subscription>
    <email>patricia@test.intershop.de</email>
    <firstName>Patricia</firstName>
    <lastName>Miller</lastName>
    <title>Ms.</title>
    <gender>Female</gender>
</subscription>

当我打印出当前发送的有效负载时,它看起来如下所示:

?xml version =“1.0”encoding =“UTF-8”standalone =“no”?订阅电子邮件=“patricia@test.intershop.de”firstName =“Patricia”gender =“Female”lastName =“Miller”title =“Ms。”/

(注意:我删除了&lt; AND&gt; BRACKETS。他们应该出现在哪里!)

但是,我收到400错误。这里有什么想法?我知道我有正确的标题,URL是正确的等等。这绝对与我正在使用的有效负载有关。任何想法都将非常感谢!!

最佳!

1 个答案:

答案 0 :(得分:3)

在您预期的有效负载中,'email','firstname'等是Subscription元素的子元素。根据代码,它们被添加为“订阅”元素的属性。如果你需要'email','firstname'等作为子元素,你应该使用appendChild()而不是setAttribute()。

Element email = doc.createElement("email");
email.appendChild(document.createTextNode("patricia@test.intershop.de"));
subscription.appendChild(email);