![](/img/trans.png)
[英]How to use RestTemplate for a POST request for a complex body in Java?
[英]How to POST xml data through RestTemplate in the body of request?
我正在使用RestTemplate执行URL。 网址采用XML格式的输入参数。
我有这样的XML,它以字符串形式存储在xmlData
变量中,我需要将此字符串传递给client_data
变量中的client_data
<?xml version="1.0"?>
<ClientData
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com model.xsd"
xmlns="http://www.google.com">
<client id="100">
<clock>
<for>
<etc>val(tery) = 1</etc>
<while><![CDATA[val(tery) < 20]]></while>
</for>
</clock>
</model>
</ClientData>
下面是我的代码-
String xmlData = getXMLData(); // this will return me above XML data as it is in String format
String url = generateURL(xmlData);
// but this line is returning me bad request always in exception
String response = restTemplate.getForObject(url, String.class);
下面是我的url
生成后的样子, RestTemplate
内部按照我的理解进行URL编码,然后为什么仍然看到错误的请求?
http://localhost:8080/test_tmp?client_data=<?xml version="1.0"?>
<ClientData
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com model.xsd"
xmlns="http://www.google.com">
<client id="100">
<clock>
<for>
<etc>val(tery) = 1</etc>
<while><![CDATA[val(tery) < 20]]></while>
</for>
</clock>
</model>
</ClientData>
如果我手动对XML字符串进行url编码,然后通过浏览器访问该url,那么它将正常工作。 我在这里做什么错?
问题是RestTemplate正在执行url编码,从而导致了问题。 将URL接受为String的方法假定未对URL进行编码,因此它将为您编码。 您可以在此处检查变体: 使用 URI。Hunch会将端点编码为无法访问的端点。
我们需要做的是防止它自动编码。 我们可以使用采用URI而不是String作为url的方法来做到这一点。
下面的示例显示了如何编码XML数据字符串并使用RestTemplate传递它,而不允许RestTemplate进行编码:
StringBuilder builder = new StringBuilder();
builder.append("http://localhost:8080/test_tmp");
builder.append("?max_time=30&users=1000&client_data=");
builder.append(URLEncoder.encode(xmlData));
URI uri = URI.create(builder.toString());
restTemplate.getForObject(uri, String.class);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.