From d03d95d067de5ef24393a92df1bc2c2c9f5673fd Mon Sep 17 00:00:00 2001 From: David Denton Date: Sun, 12 Aug 2018 21:13:20 +0100 Subject: [PATCH] add duration to JSON auto-marshalling --- .../http4k/format/AutoMarshallingContract.kt | 17 ++++++++++++++--- .../src/main/kotlin/org/http4k/format/Gson.kt | 2 ++ .../main/kotlin/org/http4k/format/Jackson.kt | 2 ++ .../src/main/kotlin/org/http4k/format/Moshi.kt | 2 ++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/http4k-core/src/test/kotlin/org/http4k/format/AutoMarshallingContract.kt b/http4k-core/src/test/kotlin/org/http4k/format/AutoMarshallingContract.kt index 2e14fd50d2..a81fb53c48 100644 --- a/http4k-core/src/test/kotlin/org/http4k/format/AutoMarshallingContract.kt +++ b/http4k-core/src/test/kotlin/org/http4k/format/AutoMarshallingContract.kt @@ -6,6 +6,7 @@ import com.natpryce.hamkrest.throws import org.http4k.core.Uri import org.junit.jupiter.api.Test import java.net.URL +import java.time.Duration import java.time.Instant import java.time.LocalDate import java.time.LocalDateTime @@ -14,7 +15,17 @@ import java.time.ZoneId import java.time.ZonedDateTime import java.util.UUID -data class CommonJdkPrimitives(val localDate: LocalDate, val localTime: LocalTime, val localDateTime: LocalDateTime, val zonedDateTime: ZonedDateTime, val instant: Instant, val uuid: UUID, val uri: Uri, val url: URL) +data class CommonJdkPrimitives( + val duration: Duration, + val localDate: LocalDate, + val localTime: LocalTime, + val localDateTime: LocalDateTime, + val zonedDateTime: ZonedDateTime, + val instant: Instant, + val uuid: UUID, + val uri: Uri, + val url: URL +) data class ArbObject(val string: String, val child: ArbObject?, val numbers: List, val bool: Boolean) @@ -23,7 +34,7 @@ data class RegexHolder(val regex: Regex) abstract class AutoMarshallingContract(private val j: AutoMarshallingJson) { protected open val expectedAutoMarshallingResult = """{"string":"hello","child":{"string":"world","child":null,"numbers":[1],"bool":true},"numbers":[],"bool":false}""" - protected open val expectedAutoMarshallingResultPrimitives = """{"localDate":"2000-01-01","localTime":"01:01:01","localDateTime":"2000-01-01T01:01:01","zonedDateTime":"2000-01-01T01:01:01Z[UTC]","instant":"1970-01-01T00:00:00Z","uuid":"1a448854-1687-4f90-9562-7d527d64383c","uri":"http://uri:8000","url":"http://url:9000"}""" + protected open val expectedAutoMarshallingResultPrimitives = """{"duration":"PT1S","localDate":"2000-01-01","localTime":"01:01:01","localDateTime":"2000-01-01T01:01:01","zonedDateTime":"2000-01-01T01:01:01Z[UTC]","instant":"1970-01-01T00:00:00Z","uuid":"1a448854-1687-4f90-9562-7d527d64383c","uri":"http://uri:8000","url":"http://url:9000"}""" val obj = ArbObject("hello", ArbObject("world", null, listOf(1), true), emptyList(), false) @@ -43,7 +54,7 @@ abstract class AutoMarshallingContract(private val j: AutoMarshallingJson) { fun `roundtrip object with common java primitive types`() { val localDate = LocalDate.of(2000, 1, 1) val localTime = LocalTime.of(1, 1, 1) - val obj = CommonJdkPrimitives(localDate, localTime, LocalDateTime.of(localDate, localTime), ZonedDateTime.of(localDate, localTime, ZoneId.of("UTC")), Instant.EPOCH, UUID.fromString("1a448854-1687-4f90-9562-7d527d64383c"), Uri.of("http://uri:8000"), URL("http://url:9000")) + val obj = CommonJdkPrimitives(Duration.ofMillis(1000), localDate, localTime, LocalDateTime.of(localDate, localTime), ZonedDateTime.of(localDate, localTime, ZoneId.of("UTC")), Instant.EPOCH, UUID.fromString("1a448854-1687-4f90-9562-7d527d64383c"), Uri.of("http://uri:8000"), URL("http://url:9000")) val out = j.asJsonString(obj) assertThat(out, equalTo(expectedAutoMarshallingResultPrimitives)) assertThat(j.asA(out, CommonJdkPrimitives::class), equalTo(obj)) diff --git a/http4k-format-gson/src/main/kotlin/org/http4k/format/Gson.kt b/http4k-format-gson/src/main/kotlin/org/http4k/format/Gson.kt index 01ed49efc5..3bb006f9e6 100644 --- a/http4k-format-gson/src/main/kotlin/org/http4k/format/Gson.kt +++ b/http4k-format-gson/src/main/kotlin/org/http4k/format/Gson.kt @@ -22,6 +22,7 @@ import java.lang.reflect.Type import java.math.BigDecimal import java.math.BigInteger import java.net.URL +import java.time.Duration import java.time.Instant import java.time.LocalDate import java.time.LocalDateTime @@ -101,6 +102,7 @@ open class ConfigurableGson(builder: GsonBuilder) : JsonLibAutoMarshallingJson