在 android studio 中构建 url 时如何对特殊字符进行编码?
How to encode special characters while building url in android studio?
我正在尝试使用特殊字符和 OR
运算符对 URL 进行编码。这是 URL 的样子:
https://example.net/house/info?_queryFilter=_id+eq+%27333a22e7-5g5g-4sd5-df67-fg66a9da8027%27+or+_id+eq+%2756nm67d0-7687-4d70-fg45-22d6745423a7%27
注意:上面URL中的333a22e7-5g5g-4sd5-df67-fg66a9da8027
和56nm67d0-7687-4d70-fg45-22d6745423a7
表示houseID
这是我用来循环 houseID
:
的代码
for (int i = 0; i < apiResponse.getHouses().size(); i++) {
if (houseQuery == null) {
houseQuery = "_id+eq+".concat("'").concat(apiResponse.getHouses().get(i).getHouseId()).concat("'");
} else {
houseQuery = houseQuery.concat("+or+_id+eq+").concat("'").concat(apiResponse.getHouses().get(i).getHouseId()).concat("'");
}
}
这是我的API界面:
@GET(UrlConstants.URL_GET_HOUSE)
void getHouseInfo(
@Header(Constants.HEADER_SESSIONID) String sessionID,
@Query(Constants.QUERY_FILTER) String query,
Callback<HouseInfoResponse> houseInfoResponseCallback);
我在日志中收到以下错误:
{"code":400,"reason":"Bad Request","message":"The value '_id+eq+'333a22e7-5g5g-4sd5-df67-fg66a9da8027'+or+_id+eq+'56nm67d0-7687-4d70-fg45-22d6745423a7'' for parameter '_queryFilter' could not be parsed as a valid query filter"}
如有任何帮助,我将不胜感激。
尝试对您的 URL 进行编码以查看它是否有效,例如使用 %27 而不是 '。
您可以使用此网站to encode
问题是 _id+eq+
中的符号 +
被替换为两位十六进制表示,从 %
) 开始,即 %2B
。
服务器不期望查询前缀 _id+eq+
和 +or+_id+eq+
.
中的 +
编码
解法:
在指定 Query
属性时将 encodeValue
指定为 False
。
@Header(Constants.HEADER_SESSIONID) String sessionID,
@Query(value = Constants.QUERY_FILTER, , encodeValue = false) String query,
Callback<HouseInfoResponse> houseInfoResponseCallback);
我正在尝试使用特殊字符和 OR
运算符对 URL 进行编码。这是 URL 的样子:
https://example.net/house/info?_queryFilter=_id+eq+%27333a22e7-5g5g-4sd5-df67-fg66a9da8027%27+or+_id+eq+%2756nm67d0-7687-4d70-fg45-22d6745423a7%27
注意:上面URL中的333a22e7-5g5g-4sd5-df67-fg66a9da8027
和56nm67d0-7687-4d70-fg45-22d6745423a7
表示houseID
这是我用来循环 houseID
:
for (int i = 0; i < apiResponse.getHouses().size(); i++) {
if (houseQuery == null) {
houseQuery = "_id+eq+".concat("'").concat(apiResponse.getHouses().get(i).getHouseId()).concat("'");
} else {
houseQuery = houseQuery.concat("+or+_id+eq+").concat("'").concat(apiResponse.getHouses().get(i).getHouseId()).concat("'");
}
}
这是我的API界面:
@GET(UrlConstants.URL_GET_HOUSE)
void getHouseInfo(
@Header(Constants.HEADER_SESSIONID) String sessionID,
@Query(Constants.QUERY_FILTER) String query,
Callback<HouseInfoResponse> houseInfoResponseCallback);
我在日志中收到以下错误:
{"code":400,"reason":"Bad Request","message":"The value '_id+eq+'333a22e7-5g5g-4sd5-df67-fg66a9da8027'+or+_id+eq+'56nm67d0-7687-4d70-fg45-22d6745423a7'' for parameter '_queryFilter' could not be parsed as a valid query filter"}
如有任何帮助,我将不胜感激。
尝试对您的 URL 进行编码以查看它是否有效,例如使用 %27 而不是 '。
您可以使用此网站to encode
问题是 _id+eq+
中的符号 +
被替换为两位十六进制表示,从 %
) 开始,即 %2B
。
服务器不期望查询前缀 _id+eq+
和 +or+_id+eq+
.
+
编码
解法:
在指定 Query
属性时将 encodeValue
指定为 False
。
@Header(Constants.HEADER_SESSIONID) String sessionID,
@Query(value = Constants.QUERY_FILTER, , encodeValue = false) String query,
Callback<HouseInfoResponse> houseInfoResponseCallback);