fix: DateTime serializer

This commit is contained in:
2019-07-30 23:01:58 +02:00
parent ecd130198c
commit 7346c85f95
3 changed files with 26 additions and 6 deletions

View File

@@ -17,6 +17,7 @@ dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.jetbrains.kotlin:kotlin-reflect:1.3.31")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.9.9")
implementation("com.fasterxml.jackson.datatype:jackson-datatype-joda:2.9.9")
implementation("com.github.jasync-sql:jasync-postgresql:0.9.53")
implementation("org.slf4j:slf4j-api:1.7.26")

View File

@@ -3,12 +3,10 @@ package fr.postgresjson.serializer
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.core.JsonProcessingException
import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.PropertyNamingStrategy
import com.fasterxml.jackson.databind.*
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
import com.fasterxml.jackson.databind.module.SimpleModule
import com.fasterxml.jackson.datatype.joda.JodaModule
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import fr.postgresjson.entity.EntitiesCollections
@@ -28,6 +26,10 @@ class Serializer(val mapper: ObjectMapper = jacksonObjectMapper()) {
module.addDeserializer(IdEntity::class.java, EntityIdDeserializer(collection))
mapper.registerModule(module)
mapper.propertyNamingStrategy = PropertyNamingStrategy.SNAKE_CASE
mapper.registerModule(JodaModule())
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
fun <T> serialize(source: EntityI<T>): String {

View File

@@ -4,6 +4,7 @@ import fr.postgresjson.entity.IdEntity
import fr.postgresjson.serializer.Serializer
import fr.postgresjson.serializer.deserialize
import fr.postgresjson.serializer.serialize
import org.joda.time.DateTime
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
@@ -13,10 +14,12 @@ import org.junit.jupiter.api.TestInstance
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
internal class SerializerTest: TestAbstract() {
private class ObjTest(var val1: String, var val2: Int) : IdEntity(1)
private class ObjTestDate(var val1: DateTime) : IdEntity(2)
private val serializer = Serializer()
private val objSerialized: String = """{"val1":"plop","val2":123,"id":2}"""
private val objSerializedWithExtra: String = """{"val1":"plop","val2":123,"id":2,"toto":"tata"}"""
private val objSerializedUpdate = """{"val1":"update","val2":123}"""
private lateinit var obj: ObjTest
@@ -29,13 +32,20 @@ internal class SerializerTest: TestAbstract() {
@Test
fun serialize() {
val json = serializer.serialize(obj)
assertTrue(json.contains("\"val1\":\"plop\",\"val2\":123"))
assertTrue(json.contains(""""val1":"plop","val2":123"""))
}
@Test
fun serialize2() {
val json = obj.serialize()
assertTrue(json.contains("\"val1\":\"plop\",\"val2\":123"))
assertTrue(json.contains(""""val1":"plop","val2":123"""))
}
@Test
fun serializeDate() {
val objDate = ObjTestDate(DateTime.parse("2019-07-30T14:08:51.420108+04:00"))
val json = objDate.serialize()
assertTrue(json.contains(""""val1":"2019-07-30T10:08:51.420Z""""), json)
}
@Test
@@ -45,6 +55,13 @@ internal class SerializerTest: TestAbstract() {
assertEquals(obj.val2, objDeserialized.val2)
}
@Test
fun deserializeWhitExtraField() {
val objDeserialized = serializer.deserialize<Int?, ObjTest>(objSerializedWithExtra)
assertEquals(obj.val1, objDeserialized.val1)
assertEquals(obj.val2, objDeserialized.val2)
}
@Test
fun deserializeUpdate() {
val objDeserialized: ObjTest = serializer.deserialize(objSerializedUpdate, obj)