Fasterxml Jackson映射 - 数据没有正确绑定

时间:2016-04-15 11:42:52

标签: java json spring jackson fasterxml

我正在尝试在浏览器中显示我的JSON,我在JSON中获取数据但只获取了我的表的最后一条记录。以下jar存在我的构建路径中,

  • 杰克逊数据绑定
  • 杰克逊核
  • 杰克逊 - 注解

这是我的控制器方法

  @RequestMapping("/viewDashboard")
    @ResponseBody
    public ModelMap test(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, @RequestParam String name) {

        ModelMap modelMap = new ModelMap();
        List<Instances> instances = viewDashboardServiceImpl.viewDashboard();
        log.info(instances.size());
        return modelMap.addAllAttributes(instances);

    }
}

实际上在数据库表中我是五条记录,但在json中我只得到一条记录数据。

在将实例列表添加到modelMap对象之前的上述方法中,我正在检查列表的大小,并且它给出了五个,但在我的JSON中它只显示一个记录的数据。

这是我的控制台输出

17:08:08,638 INFO [com.mac.controller.DashboardController](http - 127.0.0.1-808 0-1)实例大小列表:5

这是我的JSON

{"instances":{"id":5,"instanceName":".net","applications":{"id":3,"name":">net","ownerName":"Mou","version":"3kmnc"},"environments":{"id":2,"name":"IST","ownerName":"Mou","version":"1.23.asd"},"version":"2.3as"}}

提前致谢。

1 个答案:

答案 0 :(得分:1)

这看起来真正的问题是modelMap.addAllAttributes(instances)电话。 Spring 将根据每个元素的类名生成列表元素的键。

例如:

List<String> list = Arrays.asList("x", "y", "z");

ModelMap m = new ModelMap();
m.addAllAttributes(list);

此处ModelMap将包含一个属性名称为"string"且值为"z"的条目。 "x""y"不在地图中,因为每个生成的属性名称都是"string",最后一个属性名称将获胜。

要解决此问题,只需在将instances集合添加到modelMap时为其设置属性名称:

modelMap.addAttribute("myInstances", instances);