java - 如何使用Spring的rest模板对查询参数的整个xml值进行URL编码?

标签 java rest spring-boot

我正在开发 Spring Boot 应用程序

我需要向外部服务提出请求,该服务陈旧且考虑不周。该请求采用 HTTP GET(或 POST)调用的形式,但有效负载(xml 内容)需要作为查询参数传递。例如,

GET http://ill-service.com/plain.cgi?XML_DATA=<request attribute="attributeValue"><content contentAttribute="plain"/></request>

当然,查询参数 XML_DATA 的值需要进行 URL 编码,通常,Spring boot 的 RestTemplate 可以很好地满足这一要求,遵循 RFC 3986(请参阅 http://www.ietf.org/rfc/rfc3986.txt )。

除此之外,根据该 RFC 的允许,“/”和“=”字符保留在参数值中,从而给出以下查询:

GET http://ill-service.com/plain.cgi?XML_DATA=%3Crequest%20attribute=%22attributeValue%22%3E%3Ccontent%20contentAttribute=%22plain%22/%3E%3C/request%3E

在完美的世界中,这会很好,但是您还记得我说过我试图调用的服务考虑不周吗?在另一个世界中,它需要具有 XML_DATA URL 编码的完整内容。换句话说,它需要以下查询:

GET http://ill-service.com/plain.cgi?XML_DATA=%3Crequest%20attribute%3D%22attributeValue%22%3E%3Ccontent%20contentAttribute%3D%22plain%22%2F%3E%3C%2Frequest%3E%0A

我对如何指示其余模板或我用来执行此操作的 UriComponentBuilder 感到非常困惑。任何帮助将不胜感激

最佳答案

也许你可以使用spring的UriUtils

关于java - 如何使用Spring的rest模板对查询参数的整个xml值进行URL编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52973721/

相关文章:

Java Spring + Jersey 子资源 : inject constructor-arg at runtime

java - Dagger 2 不生成组件

java - JTextField 未出现

JSON 不返回 Spring Data REST 中的列

java - 使用 Java SE 6 和 Tomcat 6 安装和配置 JDBC - 请帮忙

android - Azure Cosmos DB - 错误请求 - http :400

rest - Grpc 相对于 Rest API 的优势

java - SpringBoot Webflux 无法返回 application/xml

Spring RestTemplate(setBufferRequestBody为false)不喜欢MultiValueMap请求体,它包含一个InputStream对象

在 tomcat 上运行的 Spring boot war,端口号在属性文件中指定