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-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")
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user