Jackson将多个对象序列化为一个对象

3
我可以帮助您进行翻译。以下是关于it技术方面的内容,需要将多个字段从Hibernate对象中填充到前端的Ajax调用。因此,我想从Spring返回多个Java Hibernate序列化为Json对象来响应Ajax请求。目前我的做法是:
  @RequestMapping(method=RequestMethod.GET)
  @ResponseBody
  public String getJson()
  {
     List<TableObject> result = serviceTableObject.getTableObject(pk);
     String json = "";
     ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
     try
     {
       json = ow.writeValueAsString(result);
     } catch (JsonGenerationException e)
     {
       // TODO Auto-generated catch block
       e.printStackTrace();
     } catch (JsonMappingException e)
     {
       // TODO Auto-generated catch block
       e.printStackTrace();
     } catch (IOException e)
     {
       // TODO Auto-generated catch block
       e.printStackTrace();
     }
     return json;
  }

这个代码可以正常工作并且返回一个json对象给ajax,但是我有多个类似的对象,所以我希望将所有这些对象嵌套在一个json对象中,并将后者返回给我的ajax,这样我就可以使用一个对象填充所有字段,而不是为每个对象进行多个ajax调用。例如,我希望得到以下结果:
 List<TableObject> result = serviceTableObject.getTableObject(pk);
     String json = "";
     ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
json = ow.writeValueAsString(result);


   List<SecondObject> secondObject = serviceSecondObject.getSecondObject(pk);
     String json2 = "";
     ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
json2 = ow.writeValueAsString(secondObject );

  NewJsonObject.add(json)
  NewJsonObject.add(json2)

  return newJsonObject;

为什么不创建一个包装类,其中包含您的对象列表,并将该包装类转换为JSON? - Master Mind
创建一个新类等操作太过复杂了。我只是想要在一个ajax调用中返回多个Java对象。一定有办法可以做到这一点。 - george
1个回答

5
你可以使用Map(因为JSON对象与Map没有任何区别)来保存你的对象:
@RequestMapping(method=RequestMethod.GET)
@ResponseBody
public String getJson() {
    Map<String, Object> theMap = new LinkedHashMap<>();
    // if you don't care about order just use a regular HashMap

    // put your objects in the Map with their names as keys
    theMap.put("someObject", someModelObject);

    // write the map using your code
    ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();

    return ow.writeValueAsString(theMap);
}

现在您可以在JS中访问Map中的所有对象,因为Map将被序列化为JSON对象:

response.someObject == { // JSON Serialization of someModelObject }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接