【问题标题】:jsp prints java map in different ways with same code.jsp 使用相同的代码以不同的方式打印 java map。
【发布时间】:2017-01-23 09:18:22
【问题描述】:

我正在使用 jsp。 我的jsp看起来像……

<%@page import="net.ion.ice.sp.shard.session.SessionManager"%>
<%@page import="net.ion.ice.sp.common.bean.user.Customer"%>
<%@ page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    Customer customer = SessionManager.getSessionUser(request.getParameter("session_id")) ;
    out.println(customer.getSessionDataMap()) ;
%>

很简单。此代码应该打印 java Map&lt;String, Object&gt; Object。 通常工作正常,但有时会打印JSON 方式(意思是 kolon 连接)。

我期待的结果是

{default={CREATED={date=21, day=1, hours=11, minutes=10, month=2, nanos=0, seconds=13, time=1458526213000, timezoneOffset=-540, year=116}}}

有时它会返回

{default={CREATED={"date":21,"day":1,"hours":11,"minutes":10,"month":2,"nanos":0,"seconds":13,"time":1458526213000,"timezoneOffset":-540,"year":116}}}

您可以看到一些字符串与: 相关联,但另一种情况下它与= 相关联。

我不知道有什么不同。 谢谢。

【问题讨论】:

  • 它隐式调用 map.toString() 方法。如果您有不同的输出,则意味着您使用的是不同的类(具有不同的 toString 实现)。
  • 此问题已过时,无法证明该代码出了什么问题。所以我觉得还是关闭比较好

标签: java json jsp hashmap


【解决方案1】:

您可以将Arrays#toString() 与地图中的条目集一起使用,以获得打印整齐的地图:

out.println(Arrays.toString(customer.getSessionDataMap().entrySet().toArray()));

对于以下地图:

Map<String, String> map = new HashMap<>();
map.put("one",   "first value");
map.put("two",   "second value");
map.put("three", "third value");

System.out.println(Arrays.toString(map.entrySet().toArray()));

这产生了以下输出:

[two=second value, one=first value, three=third value]

请注意,如果您想保持键的插入顺序,可以考虑使用LinkedHashMap 而不是HashMap

【讨论】:

  • 感谢您的回答。但我的问题是为什么它以不同的格式打印,而不是如何使其相同。不过谢谢。现在我正在查看@degr 的回复。
猜你喜欢
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多