Java servelt请求参数值包含符号AND?
我有下面的网址Java servelt请求参数值包含符号AND?,java,url,urlencode,url-parameters,Java,Url,Urlencode,Url Parameters,我有下面的网址 http://localhost:8080/servlet?user=John&message=hai&hello&recipient=scott 在上面的url中,我有3个请求参数,如下所示 user=John message=hai&hello recipient=scott 这里的问题在于消息请求参数的值。因为这里的值包含符号(&)。当我尝试request.getParameter(“message”)时,我只得到hai而没有hai&he
http://localhost:8080/servlet?user=John&message=hai&hello&recipient=scott
在上面的url中,我有3个请求参数,如下所示
user=John
message=hai&hello
recipient=scott
这里的问题在于消息
请求参数的值。因为这里的值包含符号(&)。当我尝试request.getParameter(“message”)
时,我只得到hai
而没有hai&hello
。我如何解决这个问题
谢谢 试试这个,而不是
…&message=hi%26hello…
。我是说,对它进行编码
[编辑]
正如您所说,您无法控制它,它是遗留应用程序,他们无法修复它;然后,我想您仍然可以使用urlcoder
对URL进行编码
String encodedUrl = URLEncoder.encode(url, "UTF-8");
// Then use encodedUrl as you were using url.
[编辑]
..或将其视为字符串
。很简单,不是吗
// Please refactor.
String[] paramPart = url.split("?");
String[] params = paramPart[1].split("&");
Map<String, String> paraMap = new HashMap<>();
for(int i=0; i<params.length; i++) {
String[] keyValue;
if(params[i].contains("=")) {
keyValue = params[i].split("=");
paraMap.put(keyValue[0], keyValue[1]);
} else {
params[i-1] = params[i-1] + "&" + params[i];
keyValue = params[i-1].split("=");
paraMap.put(keyValue[0], keyValue[1]);
}
}
//请重构。
字符串[]paramPart=url.split(“?”);
字符串[]params=paramPart[1]。拆分(&);
Map paraMap=newhashmap();
对于(int i=0;i试试这个,而不是…&message=hi%26hello…
。我的意思是,对它进行编码
[编辑]
正如您所说的,您无法控制它,它是遗留应用程序,他们无法修复它;然后,我想您仍然可以使用urlcoder
对URL进行编码
String encodedUrl = URLEncoder.encode(url, "UTF-8");
// Then use encodedUrl as you were using url.
[编辑]
…或者把它当作一个字符串
。很简单,不是吗
// Please refactor.
String[] paramPart = url.split("?");
String[] params = paramPart[1].split("&");
Map<String, String> paraMap = new HashMap<>();
for(int i=0; i<params.length; i++) {
String[] keyValue;
if(params[i].contains("=")) {
keyValue = params[i].split("=");
paraMap.put(keyValue[0], keyValue[1]);
} else {
params[i-1] = params[i-1] + "&" + params[i];
keyValue = params[i-1].split("=");
paraMap.put(keyValue[0], keyValue[1]);
}
}
//请重构。
字符串[]paramPart=url.split(“?”);
字符串[]params=paramPart[1]。拆分(&);
Map paraMap=newhashmap();
对于(int i=0;i如果您确定&recipient
总是在&message
之后,或者&message
可能是最后一个参数,或者您知道可能的参数集,那么您将需要从请求中获取查询字符串并尝试相应地拆分它
例如,如果&收件人总是在&消息
之后,那么您可以执行以下操作(伪代码/未测试):
如果您确定&recipient
总是在&message
之后,或者&message
可能是最后一个参数,或者您知道可能的参数集,那么您将需要从请求中获取查询字符串并尝试相应地拆分它
例如,如果&收件人总是在&消息
之后,那么您可以执行以下操作(伪代码/未测试):
@Ansari,谢谢你的回复。我无法控制url。它是由某个外部客户端发送的…@Ansari,谢谢你的回复。我无法控制url。它是由某个外部客户端发送的。。。