diff --git a/core/src/main/java/com/alibaba/fastjson2/util/BeanUtils.java b/core/src/main/java/com/alibaba/fastjson2/util/BeanUtils.java index 796e334029..f634b78fb8 100644 --- a/core/src/main/java/com/alibaba/fastjson2/util/BeanUtils.java +++ b/core/src/main/java/com/alibaba/fastjson2/util/BeanUtils.java @@ -1297,6 +1297,10 @@ public static String getterName(Method method, boolean kotlin, String namingStra } String fieldName = getterName(methodName, namingStrategy); + int subIndex; + if (kotlin && (subIndex = fieldName.indexOf('-')) != -1) { + fieldName = fieldName.substring(0, subIndex); + } if (fieldName.length() > 2 && fieldName.charAt(0) >= 'A' && fieldName.charAt(0) <= 'Z' diff --git a/kotlin/src/test/kotlin/com/alibaba/fastjson2/issues/Issue3288.kt b/kotlin/src/test/kotlin/com/alibaba/fastjson2/issues/Issue3288.kt new file mode 100644 index 0000000000..72417cb7d4 --- /dev/null +++ b/kotlin/src/test/kotlin/com/alibaba/fastjson2/issues/Issue3288.kt @@ -0,0 +1,27 @@ +package com.alibaba.fastjson2.issues + +import com.alibaba.fastjson2.JSON +import com.alibaba.fastjson2.toJSONString +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test + +class Issue3288 { + @JvmInline + value class TestBean(val a: Int) + + data class Test2( + val b: TestBean + ) + + @Test + fun test() { + val s1 = "{\"a\":1}" + assertEquals(s1, TestBean(1).toJSONString()) + assertEquals(s1, JSON.parseObject(s1, TestBean::class.java).toJSONString()) + assertEquals(s1, TestBean(1).toJSONString()) + val s2 = "{\"b\":2}" + assertEquals(s2, JSON.parseObject(s2, Test2::class.java) + .toJSONString()) + assertEquals(s2, JSON.parseObject(s2, Test2::class.java).toJSONString()) + } +}