2

在我的 Spring MVC 3.1 项目中,我有一个模型结构,其中一个对象的属性是子对象列表。例如:

public class Person {
    private String name;
    private List<Pet> pets;
}

然后是 Pet 类,如:

public class Pet {
    private String name;
    private String species;
}

使用默认的Jackson HTTP 转换器,我可以生成(并接受)如下所示的 Person 对象:

{
 "name": "Tres",
 "pets": [ {
            "name": "Fido",
            "species": "Dog"
           },
           {
            "name": "Mittens",
            "species": "Cat"
         } ]
}

但我更希望它生成的是:

{
 "name": "Tres",
 "pets": {
           "Fido": {
               "species": "Dog"
           },
           "Mittens": {
            "species": "Cat"
           }
         }
}

我知道我可以创建自己的视图转换器来手动将我的子对象转换为地图,但如果有任何现有的 Spring 功能,我更愿意使用它。我也尝试过调查杰克逊的一些注释,但还没有找到任何满足我需求的东西。

另外,我不希望将 pets 属性存储为 Person 中的 Map,因为这 2 个对象存储在 MongoDB 中并且位于 2 个不同的集合中。因此,我需要使用自定义转换器对 MongoDB 读取或使用自定义转换器对 HTTP 响应的输出执行转换。

感谢我在 View 转换器或 Mongo 转换器上获得的任何帮助!

4

1 回答 1

0

这是我会做的...

public class Pet {
   private String name;
   private String species;
   public String getName()
   {
       return name;
   }
   public String getSpecies()
   {
       return species;
   }
}

使用人名作为地图的键,地图的值是宠物列表

Map<String,List> peopleWithPets = new HashMap<String, List>();
peopleWithPets.put("Person Name", new ArrayList<Pet>());

JSONObject json = new JSONObject();
json.putAll( peopleWithPets );
于 2012-09-06T22:28:15.180 回答