Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Spring'对查询参数的整个xml值进行URL编码;什么是rest模板?_Java_Rest_Spring Boot - Fatal编程技术网

Java 如何使用Spring'对查询参数的整个xml值进行URL编码;什么是rest模板?

Java 如何使用Spring'对查询参数的整个xml值进行URL编码;什么是rest模板?,java,rest,spring-boot,Java,Rest,Spring Boot,我正在开发一个Spring启动应用程序 我需要向外部服务机构提出请求,这是一个陈旧且考虑不周的服务机构。请求采用HTTP GET(或POST)调用的形式,但负载(xml内容)需要作为查询参数传递。比如说, GET http://ill-service.com/plain.cgi?XML_DATA=<request attribute="attributeValue"><content contentAttribute="plain"/></request>

我正在开发一个Spring启动应用程序

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

GET http://ill-service.com/plain.cgi?XML_DATA=<request attribute="attributeValue"><content contentAttribute="plain"/></request>
在一个完美的世界里,这将是一件好事,但你还记得我说过我试图呼叫的服务构思不周吗?在另一个世界中,它需要对XML_数据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

我完全不知道如何指导rest模板或我正在使用的UriComponentBuilder这样做。任何帮助都将不胜感激

也许您可以使用spring的
UriUtils

使用
java.net.urlcoder
对您的
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)
String xmlContent=”“;
URI=UriComponentsBuilder.fromHttpUrl(“http://ill-service.com/plain.cgi")
//此部分将查询参数设置为完整编码值,而不是查询值编码
.queryParam(“XML_数据”,UriUtils.encode(xmlContent,“UTF-8”))
//构建(true)向构建器指示Uri已经编码
.build(true.toUri();
String ResponseST=restTemplate.getForObject(uri,String.class)
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)