繁体   English   中英

如何通过请求正文中的RestTemplate张贴xml数据?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM