【问题标题】:Fasterxml Jackson mapping - Data is not binding properlyFasterxml Jackson 映射 - 数据未正确绑定
【发布时间】:2016-08-07 08:55:15
【问题描述】:

我正在尝试在浏览器中显示我的 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 对象之前的上述方法中,我正在检查列表的大小,它给出的值为 5,但在我的 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"}}

提前致谢。

【问题讨论】:

    标签: java json spring jackson fasterxml


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 2017-12-30
      • 2013-08-28
      • 1970-01-01
      • 2011-11-13
      • 2016-10-05
      相关资源
      最近更新 更多