From b1c4dd590579c8c73bb53fc21f9c8deb513802e5 Mon Sep 17 00:00:00 2001 From: fcamblor Date: Sat, 6 Jan 2018 12:08:40 +0100 Subject: [PATCH] aligned over bson4jackson 2.8.0 which should fix weird date deserialization errors --- pom.xml | 2 +- .../java/restx/jongo/BsonJSR310Module.java | 17 ++++++++---- restx-jongo/module.ivy | 2 +- .../restx/jackson/BsonJodaTimeModule.java | 26 ++++++++++++------- restx.build.properties.json | 2 +- 5 files changed, 32 insertions(+), 17 deletions(-) diff --git a/pom.xml b/pom.xml index 09ac61e53..551d05fb0 100644 --- a/pom.xml +++ b/pom.xml @@ -84,7 +84,7 @@ 3.4.0 - 2.7.0 + 2.8.0 1.3.0 1.42 diff --git a/restx-jongo-java8/src/main/java/restx/jongo/BsonJSR310Module.java b/restx-jongo-java8/src/main/java/restx/jongo/BsonJSR310Module.java index d6556224c..d3136ce48 100644 --- a/restx-jongo-java8/src/main/java/restx/jongo/BsonJSR310Module.java +++ b/restx-jongo-java8/src/main/java/restx/jongo/BsonJSR310Module.java @@ -1,13 +1,14 @@ package restx.jongo; +import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.module.SimpleModule; import de.undercouch.bson4jackson.BsonGenerator; -import de.undercouch.bson4jackson.serializers.BsonSerializer; import java.io.IOException; import java.time.Instant; @@ -17,14 +18,20 @@ public class BsonJSR310Module extends SimpleModule { public BsonJSR310Module() { super("BsonJSR310Module"); - addSerializer(Instant.class, new BsonSerializer() { + addSerializer(Instant.class, new JsonSerializer() { @Override - public void serialize(Instant date, BsonGenerator bsonGenerator, SerializerProvider serializerProvider) + public void serialize(Instant date, JsonGenerator gen, SerializerProvider provider) throws IOException { if (date == null) { - serializerProvider.defaultSerializeNull(bsonGenerator); + provider.defaultSerializeNull(gen); } else { - bsonGenerator.writeDateTime(new Date(date.toEpochMilli())); + long epochMillis = date.toEpochMilli(); + if (gen instanceof BsonGenerator) { + BsonGenerator bgen = (BsonGenerator)gen; + bgen.writeDateTime(new Date(epochMillis)); + } else { + gen.writeNumber(epochMillis); + } } } }); diff --git a/restx-jongo/module.ivy b/restx-jongo/module.ivy index 86e909761..7d6f4da7b 100644 --- a/restx-jongo/module.ivy +++ b/restx-jongo/module.ivy @@ -22,7 +22,7 @@ - + diff --git a/restx-jongo/src/main/java/restx/jackson/BsonJodaTimeModule.java b/restx-jongo/src/main/java/restx/jackson/BsonJodaTimeModule.java index 114aac0a8..00ac48cf1 100644 --- a/restx-jongo/src/main/java/restx/jackson/BsonJodaTimeModule.java +++ b/restx-jongo/src/main/java/restx/jackson/BsonJodaTimeModule.java @@ -1,13 +1,15 @@ package restx.jackson; +import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.module.SimpleModule; import de.undercouch.bson4jackson.BsonGenerator; -import de.undercouch.bson4jackson.serializers.BsonSerializer; +import org.joda.time.DateMidnight; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; @@ -23,25 +25,31 @@ public class BsonJodaTimeModule extends SimpleModule { public BsonJodaTimeModule() { super("BsonJodaTimeModule"); - addSerializer(org.joda.time.DateMidnight.class, new BsonSerializer() { + addSerializer(org.joda.time.DateMidnight.class, new JsonSerializer() { @Override - public void serialize(org.joda.time.DateMidnight date, BsonGenerator bsonGenerator, SerializerProvider serializerProvider) + public void serialize(org.joda.time.DateMidnight date, JsonGenerator gen, SerializerProvider provider) throws IOException { if (date == null) { - serializerProvider.defaultSerializeNull(bsonGenerator); + provider.defaultSerializeNull(gen); + } else if (gen instanceof BsonGenerator) { + BsonGenerator bgen = (BsonGenerator)gen; + bgen.writeDateTime(date.toDate()); } else { - bsonGenerator.writeDateTime(date.toDate()); + gen.writeNumber(date.getMillis()); } } }); - addSerializer(DateTime.class, new BsonSerializer() { + addSerializer(DateTime.class, new JsonSerializer() { @Override - public void serialize(DateTime date, BsonGenerator bsonGenerator, SerializerProvider serializerProvider) + public void serialize(DateTime date, JsonGenerator gen, SerializerProvider provider) throws IOException { if (date == null) { - serializerProvider.defaultSerializeNull(bsonGenerator); + provider.defaultSerializeNull(gen); + } else if (gen instanceof BsonGenerator) { + BsonGenerator bgen = (BsonGenerator)gen; + bgen.writeDateTime(date.toDate()); } else { - bsonGenerator.writeDateTime(date.toDate()); + gen.writeNumber(date.getMillis()); } } }); diff --git a/restx.build.properties.json b/restx.build.properties.json index cd20713dc..b8e047782 100644 --- a/restx.build.properties.json +++ b/restx.build.properties.json @@ -28,7 +28,7 @@ "javax.inject.version": "1", "mongo-java-driver.version": "3.4.0", - "bson4jackson.version": "2.7.0", + "bson4jackson.version": "2.8.0", "jongo.version": "1.3.0", "servlet-api.version": "2.5",