mongodb 如何插入日期对象与最新mongojack?

k0pti3hp  于 2023-01-20  发布在  Go
关注(0)|答案(2)|浏览(119)

因此,在我对象中,当我插入private Date date;时,出现了以下异常:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: JsonGenerator of type org.mongojack.internal.object.document.DocumentObjectGenerator not supported: org.mongojack.internal.DateSerializer is designed for use only with org.mongojack.internal.object.BsonObjectGenerator or org.mongojack.internal.stream.DBEncoderBsonGenerator or com.fasterxml.jackson.databind.util.TokenBuffer (through reference chain: com.test.DocumentWrapper["date"])

我正在尝试使用该日期字段设置mongo TTL。

e4yzc0pl

e4yzc0pl1#

我最近遇到了同样的问题:通过MongoJack将日期作为Date对象存储到MongoDB中。首先,我使用了MongoJack 2.10.0版本。它需要创建自己的串行器和反串行器。

public class Serializer extends JsonSerializer<DateTime> {

    @Override
    public void serialize(DateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeObject(new Date(value.getMillis()));
    }
}

public class Deserializer extends JsonDeserializer<DateTime> {

private static final DateDeserializer DATE_DESERIALIZER = new DateDeserializer();

    @Override
    public DateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        Date date = DATE_DESERIALIZER.deserialize(p, ctxt);
        return date == null ? null : new DateTime(date);
    }
}

.....
@JsonSerialize(using = Serializer.class)
@JsonDeserialize(using = Deserializer.class)
private DateTime testDate;

public DateTime getTestDate() {
    return testDate;
}

public void setTestDate(DateTime testDate) {
    this.testDate = testDate;
}
......

在我的示例中,我将Date转换为joda DateTime以保持与代码的一致性,但也可以更改为其他类型(LocalDateTime、OffsetDateTime等)。

rsl1atfo

rsl1atfo2#

要解决此问题,请使用已修复此错误的2.10.0版本。

相关问题