簡體   English   中英

如何使用Spring的rest模板對查詢參數的整個xml值進行URL編碼?

[英]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.URLEncoderXML有效負載進行編碼,然后附加編碼后的有效負載。

遵循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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM