将嵌套文档mongoDB序列化为Jackson

时间:2015-07-21 16:13:10

标签: java json mongodb serialization jackson

所以我使用Jackson(和Mongojack一起)创建POJO的MongoDB文档。我的数据库看起来像这样:

Document{ id:1, Document2{ value1:1 value2:2}}

我已经为Document创建了一个POJO,而对于Document 2,这通常可以正常工作。问题是我的数据库中的某些地方,Document2的值为NaN,而不是具有多个值的嵌套文档,这会导致此错误

ERROR [2015-07-21 16:01:26,809] io.dropwizard.jersey.errors.LoggingExceptionMapper: Error handling a request: 3b38d500d7657352
! com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.document1.document2] from Floating-point number (NaN); no one-double/Double-arg constructor/factory method

!  at [Source: de.undercouch.bson4jackson.io.LittleEndianInputStream@534093c6; pos: 1975] (through reference chain: com.document1["document2"])
! at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148) ~[jackson-databind-2.5.1.jar:2.5.1]

不确定解决这个问题的最佳方法是什么。我想我想要的是杰克逊能够识别出Document2是否只是:nan而不是嵌套文档,只是序列化它没有任何值或什么?

1 个答案:

答案 0 :(得分:0)

如果您能够保持合理一致的数据,那真的是最好的。也就是说,可能有办法解决这个问题:

public class Document2 {

    public Document2() { }

    public Document2(double invalid)
    {
        System.out.print("invalid");
    }

    public void setValue1(int value1)
    {
        System.out.println("value1 " + value1);
    }

    public void setValue2(int value2)
    {
        System.out.println("value2 " + value2);
    }
}

在“快乐”的情况下,杰克逊将使用默认构造函数并将属性设置为给定。在NaN的情况下,它将找到单参数双构造函数,并保留其他属性。