簡體   English   中英

播放框架WS url空格

[英]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);

哪里:

  1. baseURL是你的方案+主機+路徑等。
  2. yourQueryString是......好吧,你的查詢字符串,但沒有 ? :input = / mnt / mp3 / music / folder / 01 - 23.mp3

或者,如果你想使用更靈活,編程方法,

WS.url(baseURL).setQueryParameter(param, value);

哪里:

  1. param是查詢String中的參數名稱
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM