为什么requestParameters的HashMap返回hashcode值

Why HashMap of requestParameters returning hashcode value

我正在尝试访问我的请求参数,它正在返回哈希码 value.what 是访问它的正确方法。

 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

这是因为值是 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 class 提供以下内容:

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 方法总是 returns 一个可能为空的数组(然后会发生异常)。此外,只会打印一个元素,但根据 OP,当前请求并非如此。

试试这个:

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

输入值是一个数组,所以需要用Arrays来打印。

在for循环中这样做

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