编码的Java不会产生与普通URL相同的结果

时间:2018-10-24 15:05:46

标签: java rest api url encoding

您好,所以我试图使用GET方法从REST API获取URL形式的json对象,所以当我发送普通URL时:

https://hostname/fil/rest/api/2/search?jql=project= "Station Server" AND status != Done AND assignee = "User New" ORDER BY priority DESC&maxResults=2

让我们说它返回一个带有2个元素的json对象

这给了我想要的结果,但是当我对其进行编码以便可以在Java代码中使用它时,它给了我另一个结果,它给了一个JSON对象,里面包含25000个元素

这是编码的URL:

https://hostname/fil/rest/api/2/search?jql%3Dproject%3D%20%22Station%20Server%22%20AND%20status%20%21%3D%20Done%20AND%20assignee%20%3D%20%22User%20New%22%20ORDER%20BY%20priority%20DESC%26maxResults%3D2

我在Java代码和google rest API中对其进行了测试,得出的结果相同:

String url2 = "https://jira/jira/rest/api/2/search?";
String toencode = "jql=project= \"Station server\" AND status != Done AND assignee = \"User New\" ORDER BY priority DESC&maxResults=2";

String url3 = URLEncoder.encode(toencode,"UTF-8").replaceAll("\\+", "%20");
String url = url2 + url3;

之后,我使用url发送get请求 请问我做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为您的问题是您在jql之后编码了'='。

该特定的'='必须是URL的一部分,因此服务器将其正确解释为查询参数。通过对其进行编码,您基本上发送了所有结果的请求,因为服务器将其解释为没有jql查询的搜索。