This website requires JavaScript.

LinkedHashMap返回数据顺序错乱的原因、解决方案

分类:编程人生 发布于:2020-07-17 11:15:00 字数 1033 411次阅读 SpringBootjava

这个一般的情况下比较少见,key我们一般会用字符串来去做。

但是,好巧不巧,我这个博客应用,首页显示年份,月份,就是用年份来做标识。

你会说存一个年份的数字字符串不就行了?不多做解释,看看没改之前的吧

public APIResult<LinkedHashMap<String, LinkedHashMap<String, ArrayList<ArticleBean>>>> articleAll() {
   String year = DateFormatUtils.format(bean.getPublishDate(), "yyyy") ;
   String month = DateFormatUtils.format(bean.getPublishDate(), "M") ;

}

很明显,我存进去的key是一个数字字符串,而且我也打印了在springboot返回给前端时的结果,顺序确实是对的了,到了前端页面,见鬼了,2019跑到了2020的前面去了。

查资料,是说在返回的某一处处理时,如果key是数字,会自动帮我排序?what?因为这个功能对我来说不是很重要。

于是我就做了一个快速修复,修复如下:

public APIResult<LinkedHashMap<String, LinkedHashMap<String, ArrayList<ArticleBean>>>> articleAll() {
   String year = DateFormatUtils.format(bean.getPublishDate(), "yyyy" + "年") ;
   String month = DateFormatUtils.format(bean.getPublishDate(), "M" + "月") ;

}

然后,前端显示就跟我预期的一样了。

当然,如果你们要深究这个问题到底出现在哪里,也可以在评论里面告诉我。

因为一个小小的问题,多显示一个年和少显示一个年对我来说差别其实不大,所以我就不深究了,然后为了显示方便,我也把之前端的英文月份,改成了中文月份。这样月份的顺序也和我预期的一样了。

我的springboot的json解析是jackson,我个人觉得问题应该是出在jackson返回数据的时候可能用的不是LinkedHashMap。