diff --git a/serde-jackson/src/test/groovy/io/micronaut/serde/jackson/JacksonBasicSerdeSpec.groovy b/serde-jackson/src/test/groovy/io/micronaut/serde/jackson/JacksonBasicSerdeSpec.groovy index 7977795a9..e7c1729e3 100644 --- a/serde-jackson/src/test/groovy/io/micronaut/serde/jackson/JacksonBasicSerdeSpec.groovy +++ b/serde-jackson/src/test/groovy/io/micronaut/serde/jackson/JacksonBasicSerdeSpec.groovy @@ -7,6 +7,8 @@ import io.micronaut.serde.ObjectWithArrayRecordNotNull import io.micronaut.test.extensions.spock.annotation.MicronautTest import jakarta.inject.Inject +import java.time.Instant + @MicronautTest class JacksonBasicSerdeSpec extends AbstractBasicSerdeSpec { @@ -76,4 +78,13 @@ class JacksonBasicSerdeSpec extends AbstractBasicSerdeSpec { obj == result json == """{"fooBar":"id2","abcXyz":2,"nested":{"id":2}}""" } + + def "record with multiple constructors"() { + when: + def myRecord = new MyRecord("value", 10, Date.from(Instant.now().minusSeconds(60))) + def str = jsonMapper.writeValueAsString(myRecord) + def result = jsonMapper.readValue(str, MyRecord) + then: + myRecord == result + } } diff --git a/serde-jackson/src/test/groovy/io/micronaut/serde/jackson/MyRecord.java b/serde-jackson/src/test/groovy/io/micronaut/serde/jackson/MyRecord.java new file mode 100644 index 000000000..f1caa2521 --- /dev/null +++ b/serde-jackson/src/test/groovy/io/micronaut/serde/jackson/MyRecord.java @@ -0,0 +1,28 @@ +package io.micronaut.serde.jackson; + +import com.fasterxml.jackson.annotation.JsonCreator; +import io.micronaut.core.annotation.Nullable; +import io.micronaut.serde.annotation.Serdeable; + +import java.time.Instant; +import java.util.Date; + +@Serdeable +record MyRecord(String fooBar, int abcXyz, @Nullable Date theDate, @Nullable String otherStr) { + + // TODO: Adding this annotation fixes issue + // @JsonCreator + MyRecord { + if (theDate == null) { + theDate = Date.from(Instant.now()); + } + } + + public MyRecord(String fooBar, int abcXyz, Date theDate) { + this(fooBar, abcXyz, theDate, "random"); + } + + public MyRecord(String fooBar, int abcXyz) { + this(fooBar, abcXyz, Date.from(Instant.now()), "random"); + } +}