为什么requestParameters的HashMap返回hashcode值

时间:2015-01-09 09:04:26

标签: java hashmap

我正在尝试访问我的请求参数,它正在返回hashcode值。访问它的正确方法是什么。

 public String execute()
{
    Map<String, String[]> requestParams = request.getParameterMap();
    for (Map.Entry<String, String[]> entry : requestParams.entrySet())
    {
        System.out.println(entry.getKey() + "/" + entry.getValue());
    }
   return "success";
}

控制台输出:

 userName/[Ljava.lang.String;@d206ca
 password/[Ljava.lang.String;@bbdd1f
 capacity1/[Ljava.lang.String;@1b249ae
 capacity2/[Ljava.lang.String;@37ced
 capacity3/[Ljava.lang.String;@fec020

3 个答案:

答案 0 :(得分:3)

这是因为值类型为String[],必须按以下方式打印。

for (Map.Entry<String, String[]> entry : requestParams.entrySet()) {
    System.out.print("Key: " + entry.getKey() + ", values: ");
    for (String val : entry.getValue() {
        System.out.println(entry.getValue());
    }
}

Arrays不会以良好的方式覆盖toString - 方法进行打印。因此,必须打印数组中的每个元素。

较短的版本是使用Java库中的一个可用实用程序函数。例如。提供以下内容的Arrays类:

for (Map.Entry<String, String[]> entry : requestParams.entrySet()) {
    System.out.print("Key: " + entry.getKey() + ", values: " + Arrays.toString(entry.getValue()));
}

或者,如果您使用的是Java 8,则以下代码将为您执行此操作:

requestParams.entrySet().stream()
        .map(entry -> entry.getKey() + "/" + Arrays.toString(entry.getValue()))
        .forEach(System.out::println);

编辑:从OP输入后 - 这实际上是请求的内容。

Map<String, String[]> requestParams = new HashMap<>();
requestParams.put("username", new String[]{"foo"});

for (Map.Entry<String, String[]> entry : requestParams.entrySet()) {
    System.out.print(entry.getKey() + "/" + entry.getValue()[0]);
}

这不是推荐的方法,因为getValue - 方法总是返回一个可能为空的数组(然后会发生异常)。此外,只打印一个元素,但根据OP,当前请求不是这种情况。

答案 1 :(得分:2)

试试这个:

System.out.println(entry.getKey() + "/" + Arrays.toString(entry.getValue()));

条目值是一个数组,因此您需要使用Arrays进行打印。

答案 2 :(得分:0)

在for循环

中这样做
 String s[]=entry.get(key)
 String value = ""+s[0]; //considering you have only one value