首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用RestTemplate发布XML字符串

如何使用RestTemplate发布XML字符串
EN

Stack Overflow用户
提问于 2017-02-15 18:06:14
回答 1查看 3.9K关注 0票数 2

我有以下场景。我有一个XML文件:

query-users.xml

代码语言:javascript
复制
<?xml version="1.0"?>
<q:query xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3">
</q:query>

在执行curl commend时:

代码语言:javascript
复制
curl.exe --user administrator:5ecr3t -H "Content-Type: application/xml" -X POST http://localhost:8080/midpoint/ws/rest/users/search -d @C:\Users\user\query-users.xml

我得到了所需的XML格式的响应。我正在尝试使用JAVA代码中的RestTemplate执行相同的POST请求:

代码语言:javascript
复制
try{    
    StringBuilder builder = new StringBuilder();
    builder.append("http://localhost:8080/midpoint/ws/rest/users/search");
    builder.append("?query=");
    builder.append(URLEncoder.encode("<?xml version=\"1.0\"?><q:query xmlns:q=\"http://prism.evolveum.com/xml/ns/public/query-3\"></q:query>"));

    URI uri = URI.create(builder.toString());

    restOperations.postForEntity(uri, new HttpEntity<String>(createHeaders("username", "pass")), String.class);
    logger.info(response);
    }catch(Exception e){
        logger.info(e.getMessage());
    }
}

我得到了Internal Servel Error。我在用RestTemplate将XML字符串传递给POST请求时做了一些错误的事情,但是我没有弄清楚是什么原因。

有没有办法解决这个问题?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-02-15 18:45:54

您的curl调用和RestTemplate调用不是等同的。在第一个方法中,将xml作为一个HTTP Request主体传递(这就是-d选项所做的事情)。在您的RestTemplate中,您将xml分配给查询,因此HTTP请求没有有效负载,而您的数据被编码到URL中。

如果希望将xml作为HTTP传递,则应该使用不同HttpEntity构造器:http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/HttpEntity.html#HttpEntity-T-org.springframework.util.MultiValueMap-

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42246216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档