[英]How to URL-encode the the whole xml value of a query param using Spring's rest template?
我正在使用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編碼,通常,遵循RFC 3986(請參閱http://www.ietf.org/rfc/rfc3986.txt),Spring boot的RestTemplate可以很好地工作。
除此之外,在此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.net.URLEncoder
對XML
有效負載進行編碼,然后附加編碼后的有效負載。
遵循Vasif的建議以及有關UriComponentBuilder的一些信息,我找到了以下解決方案:
String xmlContent = "<request attribute="attributeValue"><content contentAttribute="plain"/></request>";
URI uri = UriComponentsBuilder.fromHttpUrl("http://ill-service.com/plain.cgi")
//This part set the query param as a full encoded value, not as query value encoded
.queryParam("XML_DATA", UriUtils.encode(xmlContent, "UTF-8"))
//The build(true) indicate to the builder that the Uri is already encoded
.build(true).toUri();
String responseStr = restTemplate.getForObject(uri ,String.class)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.