繁体   English   中英

使用Jackson和Spring MVC 3.1将Java列表转换为以列表对象的属性为键的JSON对象

[英]Convert Java List to a JSON Object keyed by attribute of the list objects using Jackson and Spring MVC 3.1

在我的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 Converter,我可以生成(并接受)如下所示的Person对象:

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

但是我希望它生成的是:

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

我知道我可以创建自己的视图转换器,以将子对象手动转换为Map,但是如果有任何现有的Spring功能,我希望使用它。 我也曾尝试调查某些Jackson注释,但还没有找到满足我需求的任何东西。

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

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

这是我会做的...

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 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM