Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
使用HttpClient--Java通过HTTP POST请求发送XML有效负载_Java_Http_Xmlhttprequest_Httpclient - Fatal编程技术网

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

使用HttpClient--Java通过HTTP POST请求发送XML有效负载,java,http,xmlhttprequest,httpclient,Java,Http,Xmlhttprequest,Httpclient,因此,我一直在stackoverflow和google上做了大量的研究,试图回答我下面的问题,但我找不到任何可以帮助我100%完成这项工作的东西。我敢肯定,除了一个小错误之外,我什么都做对了,但很明显,你们可能还是有建议的,所以去做吧 现在,我们开始:我一直在使用HTTPClient在几个不同的环境中测试API,我使用HTTPPost方法来接受JSON有效负载,但现在我尝试使用XML发送有效负载,我遇到了一些问题。看起来我正在创建的XML字符串(在下面的代码中)是正确的。。。所以我很困惑为什么这

因此,我一直在stackoverflow和google上做了大量的研究,试图回答我下面的问题,但我找不到任何可以帮助我100%完成这项工作的东西。我敢肯定,除了一个小错误之外,我什么都做对了,但很明显,你们可能还是有建议的,所以去做吧

现在,我们开始:我一直在使用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>

patricia@test.intershop.de
帕特里夏
米勒
太太
女性
当我打印出当前发送的有效负载时,它看起来如下所示:

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

(注意:我删除了<和>括号。它们显示在应该显示的位置!)

但是,我收到一个400错误。有什么想法吗?我知道我有正确的标题,URL是正确的,等等。这绝对是与我对有效负载所做的事情有关。任何想法都将不胜感激


最好的

在您的预期负载中,“email”和“firstname”等。。是Subscription元素的子元素。根据代码,它们被添加为“subscription”元素的属性。如果您需要“电子邮件”、“名字”等。。作为子元素,应该使用appendChild()而不是setAttribute()


从代码生成的xml有效负载是否正确?根据代码、电子邮件、名字等。。设置为“订阅”元素的属性。如果您需要“电子邮件”、“名字”等。。作为子元素,您应该使用appendChild()而不是setAttribute()。请返回并放入
,并将整个内容缩进4个空格,这样我们就不必猜测或阅读您的想法。如果全部是一行,请将其保留在一行,并在滚动代码小部件中显示。@user1573133您的评论(没有第一句话)应该是答案。@JimGarrison:Thx。作为答案添加。哦,哇,非常感谢!这是我感到困惑的事情。我对java中的XML和JSON非常陌生,因此获得正确的负载非常困难,但这非常有用!我要去试试!我觉得这就是问题所在!谢谢成功了!你是个救生员!!!我喜欢编程中那些简单的东西。如此微妙,却又如此重要。再次感谢!
Element email = doc.createElement("email");
email.appendChild(document.createTextNode("patricia@test.intershop.de"));
subscription.appendChild(email);