В Java Play (2.3.9) приложение пытается получить абсолютно правильный URL:Java Play WS.get неправильно обрабатывает URL-адрес?
WS.url("http://foo.dfg?q=" + URLEncoder.encode("text with = sign", "utf-8"));
получить это: java.lang.RuntimeException: java.net.MalformedURLException: параметр QueryString не должно быть больше, чем 2 = в части
рытье кода показал, что есть код глубоко внутри NingWSRequestHolder:
if (reference.getQuery() != null) {
this.setQueryString(reference.getQuery()); //getQuery returns already decoded query
}
public WSRequestHolder setQueryString(String query) {
String[] params = query.split("&");
for (String param : params) {
String[] keyValue = param.split("="); //param == "q=text with = sign" here
if (keyValue.length > 2) {
throw new RuntimeException(new MalformedURLException("QueryString parameter should not have more than 2 = per part"));
} else if (keyValue.length >= 2) {
this.setQueryParameter(keyValue[0], keyValue[1]);
} else if (keyValue.length == 1 && param.charAt(0) != '=') {
this.setQueryParameter(keyValue[0], null);
} else {
throw new RuntimeException(new MalformedURLException("QueryString part should not start with an = and not be empty"));
}
}
return this;
}
не должны выстраиваться
String[] keyValue = param.split("=");
чтения:
String[] keyValue = param.split("=", 2);
Am я что-то отсутствует или это ошибка?
Мне действительно нужно это, пары кодирования нескольких ключевых значений по одному параметру, чтобы обойти 22 параметра из Playframework (Scala Tuple22) – raoulsson