diff --git a/core/src/main/java/com/alibaba/fastjson2/JSONReaderJSONB.java b/core/src/main/java/com/alibaba/fastjson2/JSONReaderJSONB.java index 2ca173bc5..0ae9a5540 100644 --- a/core/src/main/java/com/alibaba/fastjson2/JSONReaderJSONB.java +++ b/core/src/main/java/com/alibaba/fastjson2/JSONReaderJSONB.java @@ -3669,6 +3669,10 @@ final class JSONReaderJSONB } return decimal.intValue(); } + case BC_TIMESTAMP_MILLIS: + long millis = getLongBE(bytes, check7(offset, end)); + offset += 8; + return (int) millis; default: if (type >= BC_STR_ASCII_FIX_MIN && type <= BC_STR_ASCII_FIX_MAX) { int strlen = type - BC_STR_ASCII_FIX_MIN; diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_3400/Issue3471.java b/core/src/test/java/com/alibaba/fastjson2/issues_3400/Issue3471.java new file mode 100644 index 000000000..3b6ce431a --- /dev/null +++ b/core/src/test/java/com/alibaba/fastjson2/issues_3400/Issue3471.java @@ -0,0 +1,45 @@ +package com.alibaba.fastjson2.issues_3400; + +import com.alibaba.fastjson2.JSONB; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.JSONWriter; +import org.junit.jupiter.api.Test; + +import java.text.SimpleDateFormat; +import java.util.Date; + +public class Issue3471 { + @Test + public void test() throws Exception { + byte[] jsonBytes = JSONB.toBytes(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2025-04-01 12:47:10"), + JSONWriter.Feature.WriteClassName, + JSONWriter.Feature.FieldBased, + JSONWriter.Feature.ErrorOnNoneSerializable, + JSONWriter.Feature.ReferenceDetection, + JSONWriter.Feature.WriteNulls, + JSONWriter.Feature.NotWriteDefaultValue, + JSONWriter.Feature.NotWriteHashMapArrayListClassName, + JSONWriter.Feature.WriteNameAsSymbol); + JSONB.parseObject(jsonBytes, byte.class, + JSONReader.Feature.UseDefaultConstructorAsPossible, + JSONReader.Feature.ErrorOnNoneSerializable, + JSONReader.Feature.IgnoreAutoTypeNotMatch, + JSONReader.Feature.UseNativeObject, + JSONReader.Feature.FieldBased); + jsonBytes = JSONB.toBytes(new Date(), + JSONWriter.Feature.WriteClassName, + JSONWriter.Feature.FieldBased, + JSONWriter.Feature.ErrorOnNoneSerializable, + JSONWriter.Feature.ReferenceDetection, + JSONWriter.Feature.WriteNulls, + JSONWriter.Feature.NotWriteDefaultValue, + JSONWriter.Feature.NotWriteHashMapArrayListClassName, + JSONWriter.Feature.WriteNameAsSymbol); + JSONB.parseObject(jsonBytes, byte.class, + JSONReader.Feature.UseDefaultConstructorAsPossible, + JSONReader.Feature.ErrorOnNoneSerializable, + JSONReader.Feature.IgnoreAutoTypeNotMatch, + JSONReader.Feature.UseNativeObject, + JSONReader.Feature.FieldBased); + } +}