转储java.util.Map的内容 - 不按预期工作

时间:2012-06-16 12:07:43

标签: java servlets collections

我想根据@Greg Kopff发布的回复here

来提出这个问题。

基本上,我尝试做的是将request.getParameterMap()方法返回的Map的内容DUMP到输出。

我得到以下奇怪的Map作为输出(我相信其值是String或String数组的对象引用的地址)


    {submit=[Ljava.lang.String;@1fe4169, color=[Ljava.lang.String;@178920a,  
         chek_games=[Ljava.lang.String;@bbfa5c, foo=[Ljava.lang.String;@131de9b}

我尝试过以下代码 -


    public class CoffeeSelect extends HttpServlet {

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Map requestParams = req.getParameterMap();

        resp.getWriter().println(requestParams);
        }

    }

以下是我的HTML< form>


    <form action="SelectCofee.Do" method="post">
     <select id="coffe_color" name="color">
        <option value="green">Green</option>
        <option value="red">Red</option>
        <option value="blue">Blue</option>
     </select>

     <br/><br/>
     <input type="checkbox" id="chek_games" name="chek_games" value="chess" />
     <input type="checkbox" id="chek_games" name="chek_games" value="badminton" />
     <input type="checkbox" id="chek_games" name="chek_games" value="cricket" />

     <input type="hidden" id="foo" name="foo" value="bar" />

     <input type="submit" name="submit" value="Submit" />
    </form>

如何尊重这些对象引用或让我这样说;我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

[L表示法表明它是String[]的字符串表示形式。 HTTP允许您执行类似

的操作

http://myserver.com/mypage?myparam=firstvalue&myparam=secondvalue ....

(考虑多选<select>

为了实现这一点,参数Map不是Map<String, String>而是Map<String, String[]>(我不知道实现是否真的使用了泛型,它只是一个显式表示)。

因此,要转储参数,您需要。

a)假设您不会为同一个参数获取多个值;循环参数名称并使用request.getParameter

b)如果接受多个值,则循环参数名称并序列化数组。