Java 由于%26,浏览器和邮递员返回reults,但Rest模板返回0个结果

Java 由于%26,浏览器和邮递员返回reults,但Rest模板返回0个结果,java,spring,resttemplate,Java,Spring,Resttemplate,在我的url中有一个查询部分。在查询中,我通过了%26。 范例 如果我在邮递员或浏览器中运行相同的URL,则返回21个结果,但如果我在RestTemplate中运行,则返回0个结果。 我认为API无法识别%26 我在Python中也尝试了相同的URL,它返回了21个结果 示例代码 url = "http://host.com/api/1/searcharticles?key=XXXXXX&query=(subject:"Polls %26 Surveys")"; byte[] gzipR

在我的url中有一个查询部分。在查询中,我通过了%26。 范例

如果我在邮递员或浏览器中运行相同的URL,则返回21个结果,但如果我在RestTemplate中运行,则返回0个结果。 我认为API无法识别%26

我在Python中也尝试了相同的URL,它返回了21个结果

示例代码

url = "http://host.com/api/1/searcharticles?key=XXXXXX&query=(subject:"Polls %26 Surveys")";
byte[] gzipResponse = restTemplate.exchange(metabaseUrl, HttpMethod.GET, entity, byte[].class).getBody();
String string = new String(gzipResponse);
System.out.println(string);

在使用RestTemplate时,不要仅使用%26,请尝试使用URLEncoder

URLEncoder.encode(your url string, "UTF-8")
两件事

第一名:

您的url变量看起来不正确。应该是

url = "http://host.com/api/1/searcharticles?key=XXXXXX&query=(subject:\"Polls %26 Surveys\")";
秒:

你的URL是经过编码的,所以你需要在像这样发送之前对其进行解码

String url = URLDecoder.decode("Polls %26 Surveys", "UTF-8");
System.out.println(url);

OUTPUT:    
Polls & Surveys

您是否尝试过这样做,只要在使用之前对url进行编码,就不需要使用
%26

    url = "http://host.com/api/1/searcharticles?key=XXXXXX&query=(subject:\"Polls & Surveys\")";
    url = URLEncoder.encode(url, "UTF-8");
    byte[] gzipResponse = restTemplate.exchange(url, HttpMethod.GET, entity, byte[].class).getBody();
    String string = new String(gzipResponse);
    System.out.println(string);

为什么url中有%26?这是查询的一部分。比如query=“subject:“民意测验和调查”。因为&在Java中不起作用,所以我将其设置为%26。您可以使用UriComponentBuilder在rest模板中传递参数。此外,您还可以对它们进行编码。
    url = "http://host.com/api/1/searcharticles?key=XXXXXX&query=(subject:\"Polls & Surveys\")";
    url = URLEncoder.encode(url, "UTF-8");
    byte[] gzipResponse = restTemplate.exchange(url, HttpMethod.GET, entity, byte[].class).getBody();
    String string = new String(gzipResponse);
    System.out.println(string);