我正在尝试访问我的请求参数,它正在返回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
答案 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