为什么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
我正在尝试访问我的请求参数,它正在返回哈希码 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