alibaba / fastjson2

🚄 FASTJSON2 is a Java JSON library with excellent performance.
Apache License 2.0
3.76k stars 488 forks source link

[BUG]dubbo序列化BUG,值错误 #3139

Open pigeon-fancier opened 4 days ago

pigeon-fancier commented 4 days ago

问题描述

简要描述您碰到的问题。 dubbo-version3.3.0+,在java consumer调用kotlin provider时,出现kotlin端有实际值(有效值),但是java端出现值变成默认值的情况

环境信息

请填写以下信息:

重现步骤

如何操作可以重现该问题: kotlin端

data class Item(val value: String = "默认值")
data class Result(val low: Item = Item(), val mid: Item = Item(), val high: Item = Item() )
// interface定义
fun getResult(q: String) : Result
Result result = getResult("xxxx");
log.info("{}", JSON.toJSONString(result))
// 输出 {"low": {"value": "low"}, "mid": {"value": "默认值"}, "high": {"value": "high"}}
// 比较固定的是,只有mid这个里面的值会是默认值
  1. 使用 xxx.xxx 方法
  2. 输入 ... 数据
  3. 出现 ... 错误
    //可在此输入示例代码

期待的正确结果

对您期望发生的结果进行清晰简洁的描述。 {"low": {"value": "low"}, "mid": {"value": "mid"}, "high": {"value": "high"}}

相关日志输出

请复制并粘贴任何相关的日志输出。

附加信息

如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。

wenshao commented 12 hours ago
class Issue3139 {
    data class Item(val value: String = "默认值")
    data class Result(val low: Item = Item(), val mid: Item = Item(), val high: Item = Item() )

    @Test
    fun test() {
        var r = Result(Item("L"), Item("M"), Item("H"))
        var jsonb = JSONB.toBytes(r)
        println(JSONB.toJSONString(jsonb))
        var r1 = JSONB.parseObject(jsonb, Result::class.java)
        assertEquals("{\"high\":{\"value\":\"H\"},\"low\":{\"value\":\"L\"},\"mid\":{\"value\":\"M\"}}", JSON.toJSONString(r1))
    }
}

问题没重现,你是否可以帮忙构造重现问题的testcase