【问题标题】:How to POST XML string using RestTemplate如何使用 RestTemplate POST XML 字符串
【发布时间】:2017-02-15 10:06:14
【问题描述】:

我有以下情况。我有一个 XML 文件:

查询用户.xml

<?xml version="1.0"?>
<q:query xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3">
</q:query>

执行 curl 命令时:

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 请求时我做错了一些事情,但我不知道它是什么。

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

谢谢

【问题讨论】:

  • 你可以访问服务器的日志吗?我看到你正在访问 localhost
  • 您没有在请求正文中发布您的 xml,而是将其作为查询参数发送...这篇文章可能会对您有所帮助 stackoverflow.com/questions/35461148/…

标签: java xml post spring-boot resttemplate


【解决方案1】:

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

如果你想将你的 xml 作为 HTTP Body 传递,你应该使用不同的 HttpEntity 构造函数:http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/http/HttpEntity.html#HttpEntity-T-org.springframework.util.MultiValueMap-

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多