使用Java Servlet解析关联数组请求参数

Met*_*ome 7 java servlets

是否可以使用Java servlet API从诸如此类的请求中解析字符串键?

http://localhost:8080/?assocArray[key1]=value1&assocArray[key2]=value2&assocArray[key3]=value3

getParameterValues("assocArray") returns ["value3","value1","value1"]
Run Code Online (Sandbox Code Playgroud)

返回数组中值的排序不是键的顺序(不重要)

已解决:有可能,键被解释为简单的全局键字符串.Java不会将它们识别为数组.使用正则表达式

JB *_*zet 18

对于相同的参数名称,您可能有多个值:

http://localhost:8080/?param1=value1&param1=value2&param1=value3
Run Code Online (Sandbox Code Playgroud)

在这种情况下,getParameterValues("param1")将返回一个String[]包含3个元素:"value1","value2""value3".

在你给的例子中,定义了3个不同的参数:assocArray[key1],assocArray[key2]assocArray[key3].servlet API将它们视为3个完全不同的参数,没有任何共同点.因此,您必须致电getParameter("assocArray[key1]")获取"value1",getParameter("assocArray[key2]")获取"value2"等.


Bal*_*usC 10

不是直接的.将[]在HTTP请求的参数没有特殊的含义,是由不被识别为数组键了Servlet API(你或许这的确有这个专有解析器PHP程序员?).你需要分析和收集它自己在一个循环.

例如,

Map<String, String> assocArray = new LinkedHashMap<String, String>();

for (Entry<String, String[]> entry : request.getParameterMap().entrySet()) {
    String name = entry.getKey();

    if (name.startsWith("assocArray[")) {
        String key = name.substring(name.indexOf('[') + 1, name.indexOf(']')); 
        assocArray.put(key, entry.getValue()[0]);
    }
}
Run Code Online (Sandbox Code Playgroud)