fix: DateTime serializer
This commit is contained in:
@@ -17,6 +17,7 @@ dependencies {
|
|||||||
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
|
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
|
||||||
implementation("org.jetbrains.kotlin:kotlin-reflect:1.3.31")
|
implementation("org.jetbrains.kotlin:kotlin-reflect:1.3.31")
|
||||||
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.9.9")
|
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("com.github.jasync-sql:jasync-postgresql:0.9.53")
|
||||||
implementation("org.slf4j:slf4j-api:1.7.26")
|
implementation("org.slf4j:slf4j-api:1.7.26")
|
||||||
|
|
||||||
|
|||||||
@@ -3,12 +3,10 @@ package fr.postgresjson.serializer
|
|||||||
import com.fasterxml.jackson.core.JsonParser
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException
|
import com.fasterxml.jackson.core.JsonProcessingException
|
||||||
import com.fasterxml.jackson.core.type.TypeReference
|
import com.fasterxml.jackson.core.type.TypeReference
|
||||||
import com.fasterxml.jackson.databind.DeserializationContext
|
import com.fasterxml.jackson.databind.*
|
||||||
import com.fasterxml.jackson.databind.JsonNode
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
|
||||||
import com.fasterxml.jackson.databind.PropertyNamingStrategy
|
|
||||||
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
|
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
|
||||||
import com.fasterxml.jackson.databind.module.SimpleModule
|
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.jacksonObjectMapper
|
||||||
import com.fasterxml.jackson.module.kotlin.readValue
|
import com.fasterxml.jackson.module.kotlin.readValue
|
||||||
import fr.postgresjson.entity.EntitiesCollections
|
import fr.postgresjson.entity.EntitiesCollections
|
||||||
@@ -28,6 +26,10 @@ class Serializer(val mapper: ObjectMapper = jacksonObjectMapper()) {
|
|||||||
module.addDeserializer(IdEntity::class.java, EntityIdDeserializer(collection))
|
module.addDeserializer(IdEntity::class.java, EntityIdDeserializer(collection))
|
||||||
mapper.registerModule(module)
|
mapper.registerModule(module)
|
||||||
mapper.propertyNamingStrategy = PropertyNamingStrategy.SNAKE_CASE
|
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 {
|
fun <T> serialize(source: EntityI<T>): String {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import fr.postgresjson.entity.IdEntity
|
|||||||
import fr.postgresjson.serializer.Serializer
|
import fr.postgresjson.serializer.Serializer
|
||||||
import fr.postgresjson.serializer.deserialize
|
import fr.postgresjson.serializer.deserialize
|
||||||
import fr.postgresjson.serializer.serialize
|
import fr.postgresjson.serializer.serialize
|
||||||
|
import org.joda.time.DateTime
|
||||||
import org.junit.jupiter.api.Assertions.assertEquals
|
import org.junit.jupiter.api.Assertions.assertEquals
|
||||||
import org.junit.jupiter.api.Assertions.assertTrue
|
import org.junit.jupiter.api.Assertions.assertTrue
|
||||||
import org.junit.jupiter.api.BeforeEach
|
import org.junit.jupiter.api.BeforeEach
|
||||||
@@ -13,10 +14,12 @@ import org.junit.jupiter.api.TestInstance
|
|||||||
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
|
||||||
internal class SerializerTest: TestAbstract() {
|
internal class SerializerTest: TestAbstract() {
|
||||||
private class ObjTest(var val1: String, var val2: Int) : IdEntity(1)
|
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 serializer = Serializer()
|
||||||
|
|
||||||
private val objSerialized: String = """{"val1":"plop","val2":123,"id":2}"""
|
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 val objSerializedUpdate = """{"val1":"update","val2":123}"""
|
||||||
private lateinit var obj: ObjTest
|
private lateinit var obj: ObjTest
|
||||||
|
|
||||||
@@ -29,13 +32,20 @@ internal class SerializerTest: TestAbstract() {
|
|||||||
@Test
|
@Test
|
||||||
fun serialize() {
|
fun serialize() {
|
||||||
val json = serializer.serialize(obj)
|
val json = serializer.serialize(obj)
|
||||||
assertTrue(json.contains("\"val1\":\"plop\",\"val2\":123"))
|
assertTrue(json.contains(""""val1":"plop","val2":123"""))
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun serialize2() {
|
fun serialize2() {
|
||||||
val json = obj.serialize()
|
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
|
@Test
|
||||||
@@ -45,6 +55,13 @@ internal class SerializerTest: TestAbstract() {
|
|||||||
assertEquals(obj.val2, objDeserialized.val2)
|
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
|
@Test
|
||||||
fun deserializeUpdate() {
|
fun deserializeUpdate() {
|
||||||
val objDeserialized: ObjTest = serializer.deserialize(objSerializedUpdate, obj)
|
val objDeserialized: ObjTest = serializer.deserialize(objSerializedUpdate, obj)
|
||||||
|
|||||||
Reference in New Issue
Block a user