我正在开发 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/