diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterProvider.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterProvider.java
index 3fde6d1742..d991fad09d 100644
--- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterProvider.java
+++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterProvider.java
@@ -8,10 +8,7 @@
import com.alibaba.fastjson2.modules.ObjectCodecProvider;
import com.alibaba.fastjson2.modules.ObjectWriterAnnotationProcessor;
import com.alibaba.fastjson2.modules.ObjectWriterModule;
-import com.alibaba.fastjson2.util.BeanUtils;
-import com.alibaba.fastjson2.util.GuavaSupport;
-import com.alibaba.fastjson2.util.JDKUtils;
-import com.alibaba.fastjson2.util.TypeUtils;
+import com.alibaba.fastjson2.util.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@@ -447,6 +444,8 @@ private ObjectWriter getObjectWriterInternal(Type objectType, Class objectClass,
case "android.net.Uri$StringUri":
objectWriter = ObjectWriterImplToString.INSTANCE;
break;
+ case "com.clickhouse.data.value.UnsignedLong":
+ objectWriter = new ObjectWriterImplToString(true);
default:
break;
}
diff --git a/extension/pom.xml b/extension/pom.xml
index 68897a8e02..fbd1884653 100644
--- a/extension/pom.xml
+++ b/extension/pom.xml
@@ -149,6 +149,13 @@
${fastjson1x.version}
test
+
+ com.clickhouse
+ clickhouse-jdbc
+ 0.6.5
+ http
+ test
+
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
diff --git a/extension/src/test/java/com/alibaba/fastjson2/issues/Issue2958.java b/extension/src/test/java/com/alibaba/fastjson2/issues/Issue2958.java
new file mode 100644
index 0000000000..fc54f8c984
--- /dev/null
+++ b/extension/src/test/java/com/alibaba/fastjson2/issues/Issue2958.java
@@ -0,0 +1,19 @@
+package com.alibaba.fastjson2.issues;
+
+import com.alibaba.fastjson2.JSON;
+import com.clickhouse.data.value.UnsignedLong;
+import org.junit.jupiter.api.Test;
+
+import java.math.BigInteger;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class Issue2958 {
+ @Test
+ public void test() throws Exception {
+ String str = "9223372036854775808";
+ UnsignedLong unsignedLong = UnsignedLong.valueOf(new BigInteger(str));
+ String json = JSON.toJSONString(unsignedLong);
+ assertEquals(str, json);
+ }
+}