[英]Play framework WS url spaces
我在播放框架2.3.3中使用包含空格的url調用WS.url()時遇到問題。 所有其他字符都自動編碼,但不是空格。 當我嘗試將所有空格更改為“%20”時,由於“%”字符,WS將其轉換為“%2520”。 使用空格我有java.net.URISyntaxException:查詢中的非法字符。 我怎么處理這個?
URL的一部分查詢字符串:
&input=/mnt/mp3/music/folder/01 - 23.mp3
代碼如下所示:
Promise<JsonNode> jsonPromise = WS.url(url).setAuth("", "cube", WSAuthScheme.BASIC).get().map(
new Function<WSResponse, JsonNode>() {
public JsonNode apply(WSResponse response) {
System.out.println(response.getBody());
JsonNode json = response.asJson();
return json;
}
}
);
您應該根據java.net.URL(Play!用於它的WS)的方式“構建”您的URL。 WS.url()遵循相同的邏輯。
建議僅對表單數據使用URLEncoder / Decoder。 來自JavaDoc:
“注意,java.net.URI類在某些情況下會執行其組件字段的轉義。管理URL編碼和解碼的推薦方法是使用java.net.URI,並進行轉換
使用toURI()和URI.toURL()在這兩個類之間。 也可以使用URLEncoder和URLDecoder類,但僅用於HTML表單編碼,這與RFC2396中定義的編碼方案不同。“
所以,解決方案是使用這個 :
WS.url(baseURL).setQueryString(yourQueryString);
哪里:
baseURL
是你的方案+主機+路徑等。 yourQueryString
是......好吧,你的查詢字符串,但沒有 ?
:input = / mnt / mp3 / music / folder / 01 - 23.mp3 或者,如果你想使用更靈活,編程方法, 這 :
WS.url(baseURL).setQueryParameter(param, value);
哪里:
param
是查詢String中的參數名稱 value
是參數的值 如果您想在查詢中使用帶有值的多個參數,則需要通過添加另一個.setQueryParameter(...)
來鏈接它們。 這意味着這種方法不適合復雜的多參數查詢字符串。
干杯!
如果你檢查控制台,你會發現異常是: java.net.URISyntaxException: Illegal character in path at index ...
這是因為可以玩Java API使用java.net.URL
(你可以看到在這里的第47行)。
您可以使用java.net.URLEncoder對您的URL進行編碼
WS.url("http://" + java.net.URLEncoder.encode("google.com/test me", "UTF-8"))
UPDATE
如果您需要符合RFC 2396的方法,則可以執行以下操作:
java.net.URI u = new java.net.URI(null, null, "http://google.com/test me",null);
System.out.println("encoded url " + u.toASCIIString());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.