我有以下场景。我有一个XML文件:
query-users.xml
<?xml version="1.0"?>
<q:query xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3">
</q:query>在执行curl commend时:
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请求:
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请求时做了一些错误的事情,但是我没有弄清楚是什么原因。
有没有办法解决这个问题?
谢谢
发布于 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-
https://stackoverflow.com/questions/42246216
复制相似问题