所以我使用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而不是嵌套文档,只是序列化它没有任何值或什么?
答案 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
的情况下,它将找到单参数双构造函数,并保留其他属性。