我目前正在将一些代码从Jackson 1.x迁移到Jackson 2.5 json mapper,这是一个长期存在的问题,在1.x中没有.
这是设置(见下面的代码):
问题: 如果我序列化Dog的一个实例,它按预期工作(杰克逊也将类型信息添加到json字符串).但是当我序列化Human类的一个实例时,会抛出一个异常:
com.fasterxml.jackson.databind.JsonMappingException:未为类型com.pet.Dog实现的类型id处理(通过引用链:com.Human ["pet"])
CustomPetSerializer类的serialize(...)方法未被调用(使用断点测试).
代码:
IPet实现:
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="type")
@JsonSubTypes({
@JsonSubTypes.Type(value=Dog.class, name="dog")
//,@JsonSubTypes.Type(value=Cat.class, name="cat")
//more subtypes here...
})
public interface IPet
{
public Long getId();
public String getPetMakes();
}
Run Code Online (Sandbox Code Playgroud)
狗实施:
public class Dog implements IPet
{
@Override
public String getPetMakes()
{
return "Wuff!";
}
@Override
public Long getId()
{
return 777L;
}
}
Run Code Online (Sandbox Code Playgroud)
拥有狗的人:
public class Human
{
private IPet pet = new Dog();
@JsonSerialize(using=CustomPetSerializer.class) …
Run Code Online (Sandbox Code Playgroud) 我刚开始学习MongoDB,无法找到解决问题的方法.
得到那个文件:
> db.test.insert({"name" : "Anika", "arr" : [ [11, 22],[33,44] ] })
Run Code Online (Sandbox Code Playgroud)
请注意"arr"字段是一个多维数组.
现在我正在寻找一个只返回arr [0] [1]值22的查询.我试图通过使用$ slice来实现它,但是我不知道如何使用它来解决第二个维度.
> db.test.find({},{_id:0,"arr":{$slice: [0,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
Run Code Online (Sandbox Code Playgroud)
我也试过了
> db.test.find({},{_id:0,"arr":{$slice: [0,1][1,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
Run Code Online (Sandbox Code Playgroud)
期望的输出也是
22
Run Code Online (Sandbox Code Playgroud)
要么
{"arr":[[22]]}
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑:
阅读评论后,我认为我已经过多地简化了示例数据,我必须提供更多信息:
示例数据:
> db.test.insert({"name" : "Olivia", "arr" : [ [11, 22, 33, 44],[55,66,77,88],[99] ] …
Run Code Online (Sandbox Code Playgroud)