From e22741fca602757fe105e0e3442045dfb12766ed Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Wed, 13 Dec 2023 13:29:56 +0100 Subject: [PATCH 1/2] add null check for typeIdDef in LocalDateTimeSerializer --- .../jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java b/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java index 4fe5e406..64eebc6c 100644 --- a/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java +++ b/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java @@ -86,7 +86,7 @@ public void serializeWithType(LocalDateTime value, JsonGenerator g, SerializerPr WritableTypeId typeIdDef = typeSer.writeTypePrefix(g, typeSer.typeId(value, serializationShape(provider))); // need to write out to avoid double-writing array markers - if (typeIdDef.valueShape == JsonToken.START_ARRAY) { + if (typeIdDef != null && typeIdDef.valueShape == JsonToken.START_ARRAY) { _serializeAsArrayContents(value, g, provider); } else { DateTimeFormatter dtf = _formatter; From 5a894d2368ff353e9d90080e3ef008039489eb6d Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Wed, 13 Dec 2023 14:03:36 +0100 Subject: [PATCH 2/2] update --- .../jsr310/ser/LocalDateSerializer.java | 26 +++++++++++-------- .../jsr310/ser/LocalDateTimeSerializer.java | 20 ++++++++------ 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateSerializer.java b/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateSerializer.java index 14c77040..0c949a4b 100644 --- a/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateSerializer.java +++ b/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateSerializer.java @@ -82,18 +82,22 @@ public void serializeWithType(LocalDate value, JsonGenerator g, { WritableTypeId typeIdDef = typeSer.writeTypePrefix(g, typeSer.typeId(value, serializationShape(provider))); - // need to write out to avoid double-writing array markers - switch (typeIdDef.valueShape) { - case START_ARRAY: - _serializeAsArrayContents(value, g, provider); - break; - case VALUE_NUMBER_INT: - g.writeNumber(value.toEpochDay()); - break; - default: - g.writeString((_formatter == null) ? value.toString() : value.format(_formatter)); + if (typeIdDef == null) { + serialize(value, g, provider); + } else { + // need to write out to avoid double-writing array markers + switch (typeIdDef.valueShape) { + case START_ARRAY: + _serializeAsArrayContents(value, g, provider); + break; + case VALUE_NUMBER_INT: + g.writeNumber(value.toEpochDay()); + break; + default: + g.writeString((_formatter == null) ? value.toString() : value.format(_formatter)); + } + typeSer.writeTypeSuffix(g, typeIdDef); } - typeSer.writeTypeSuffix(g, typeIdDef); } protected void _serializeAsArrayContents(LocalDate value, JsonGenerator g, diff --git a/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java b/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java index 64eebc6c..e55d44cf 100644 --- a/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java +++ b/datetime/src/main/java/com/fasterxml/jackson/datatype/jsr310/ser/LocalDateTimeSerializer.java @@ -85,17 +85,21 @@ public void serializeWithType(LocalDateTime value, JsonGenerator g, SerializerPr { WritableTypeId typeIdDef = typeSer.writeTypePrefix(g, typeSer.typeId(value, serializationShape(provider))); - // need to write out to avoid double-writing array markers - if (typeIdDef != null && typeIdDef.valueShape == JsonToken.START_ARRAY) { - _serializeAsArrayContents(value, g, provider); + if (typeIdDef == null) { + serialize(value, g, provider); } else { - DateTimeFormatter dtf = _formatter; - if (dtf == null) { - dtf = _defaultFormatter(); + // need to write out to avoid double-writing array markers + if (typeIdDef.valueShape == JsonToken.START_ARRAY) { + _serializeAsArrayContents(value, g, provider); + } else { + DateTimeFormatter dtf = _formatter; + if (dtf == null) { + dtf = _defaultFormatter(); + } + g.writeString(value.format(dtf)); } - g.writeString(value.format(dtf)); + typeSer.writeTypeSuffix(g, typeIdDef); } - typeSer.writeTypeSuffix(g, typeIdDef); } private final void _serializeAsArrayContents(LocalDateTime value, JsonGenerator g,