Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jackson和SpringMVC3.1将Java列表转换为一个JSON对象,该对象由列表对象的属性设置键_Java_Spring Mvc_Jackson_Spring Data Mongodb - Fatal编程技术网

使用Jackson和SpringMVC3.1将Java列表转换为一个JSON对象,该对象由列表对象的属性设置键

使用Jackson和SpringMVC3.1将Java列表转换为一个JSON对象,该对象由列表对象的属性设置键,java,spring-mvc,jackson,spring-data-mongodb,Java,Spring Mvc,Jackson,Spring Data Mongodb,在我的SpringMVC3.1项目中,我有一个模型结构,其中一个对象有一个属性,该属性是子对象的列表。例如: public class Person { private String name; private List<Pet> pets; } 默认情况下,我可以生成和接受如下所示的Person对象: { "name": "Tres", "pets": [ { "name": "Fido", "species":

在我的SpringMVC3.1项目中,我有一个模型结构,其中一个对象有一个属性,该属性是子对象的列表。例如:

public class Person {
    private String name;
    private List<Pet> pets;
}
默认情况下,我可以生成和接受如下所示的Person对象:

{
 "name": "Tres",
 "pets": [ {
            "name": "Fido",
            "species": "Dog"
           },
           {
            "name": "Mittens",
            "species": "Cat"
         } ]
}
但我更希望它产生的是:

{
 "name": "Tres",
 "pets": {
           "Fido": {
               "species": "Dog"
           },
           "Mittens": {
            "species": "Cat"
           }
         }
}
我知道我可以创建自己的视图转换器来手动将我的子对象转换为地图,但如果有任何现有的Spring功能,我更愿意使用它。我也尝试过调查一些Jackson注释,但还没有找到任何符合我需要的

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


我非常感谢在View converter或Mongo converter上得到的任何帮助

下面是我要做的

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

这就是我要做的

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

问题是它仍然会产生一些我不想要的东西。它将生成一个JSON对象,其键是人名,值仍然是一个宠物对象列表。我希望pets键的值是另一个映射。那么,你想要的是一个在概念上看起来很混乱的映射,但是你的应用程序将是结果对象中pets标记的结构,但是我希望找到的是一个或一个Jackson注释,比如@JsonTypeInfo。但是当我试着给出一个例子时,我发现还有另一个问题涉及到同样的想法。谢谢你的帮助;作为重复,我会关闭这个,问题是它仍然会产生一些我不想要的东西。它将生成一个JSON对象,其键是人名,值仍然是一个宠物对象列表。我希望pets键的值是另一个映射。那么,你想要的是一个在概念上看起来很混乱的映射,但是你的应用程序将是结果对象中pets标记的结构,但是我希望找到的是一个或一个Jackson注释,比如@JsonTypeInfo。但是当我试着给出一个例子时,我发现还有另一个问题涉及到同样的想法。谢谢你的帮助;我将重复结束此问题。这类似于此处已提出的问题:[using-jacksons-jsontypeinfo-with-a-custom-serializer][1]:这类似于此处已提出的问题:[using-jacksons-jsontypeinfo-with-a-custom-serializer][1]: