@@ -16,6 +16,7 @@ import java.time.Instant
16
16
import kotlin.test.assertContentEquals
17
17
import kotlin.test.assertEquals
18
18
import kotlin.time.Duration.Companion.hours
19
+ import kotlin.time.Duration.Companion.seconds
19
20
import java.time.Duration as JavaDuration
20
21
import kotlin.time.Duration as KotlinDuration
21
22
@@ -177,6 +178,31 @@ class DurationTests {
177
178
assertEquals(mapper.writeValueAsString(jdto), mapper.writeValueAsString(kdto))
178
179
}
179
180
181
+ data class DurationWithFormattedUnits (
182
+ @field:JsonFormat(pattern = "HOURS ") val formatted : KotlinDuration ,
183
+ val default : KotlinDuration ,
184
+ ) {
185
+ companion object {
186
+ @Suppress(" unused" )
187
+ @JvmStatic
188
+ @JsonCreator
189
+ fun create (
190
+ formatted : KotlinDuration ,
191
+ default : KotlinDuration ,
192
+ ) = DurationWithFormattedUnits (formatted, default)
193
+ }
194
+ }
195
+
196
+ @Test
197
+ fun `should deserialize using custom units specified by format annotation` () {
198
+ val mapper = objectMapper.registerModule(JavaTimeModule ())
199
+
200
+ val actual = mapper.readValue<DurationWithFormattedUnits >(""" {"formatted":1,"default":1}""" )
201
+
202
+ assertEquals(1 .hours, actual.formatted)
203
+ assertEquals(1 .seconds, actual.default)
204
+ }
205
+
180
206
private fun jacksonObjectMapper (
181
207
configuration : KotlinModule .Builder .() -> Unit ,
182
208
) = ObjectMapper ().registerModule(kotlinModule(configuration))
0 commit comments