Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] 对包含hutool的Tree的java bean使用JSON.parseObject 反序列化的问题 #2375

Closed
zhaokjun opened this issue Mar 26, 2024 · 2 comments
Labels
bug Something isn't working fixed
Milestone

Comments

@zhaokjun
Copy link

zhaokjun commented Mar 26, 2024

问题描述

简要描述您碰到的问题。
在反序列化包含hutool的Tree的List的java bean时,会丢失数据,但用jackson反序列化则正常

环境信息

请填写以下信息:

  • OS信息: [win11]
  • JDK信息: [jdk8]
  • 版本信息:[Fastjson2 2.0.48,hutool-core 5.8.26]

重现步骤

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

  1. 使用 xxx.xxx 方法
  2. 输入 ... 数据
  3. 出现 ... 错误
import cn.hutool.core.lang.tree.Tree;

import java.io.Serializable;
import java.util.List;

public class DemoVO2 implements Serializable {
    private static final long serialVersionUID = 1L;
    List<Tree<String>> treeList;

    public List<Tree<String>> getTreeList() {
        return treeList;
    }

    public void setTreeList(List<Tree<String>> treeList) {
        this.treeList = treeList;
    }
}

main方法测试如下

    public static void main(String[] args) throws JsonProcessingException {

        String jsonString = "{\"treeList\":[{\"name\":\"name\",\"id\":\"1\",\"extra\":\"extra\"}]}";

        JSONObject jsonObject = JSON.parseObject(jsonString);
        JSONArray array = jsonObject.getJSONArray("treeList");
        array.forEach((v)-> System.out.println("JSONArray ==> "+v));

        DemoVO2 vo2 = JSON.parseObject(jsonString, DemoVO2.class);
        List<Tree<String>> list = vo2.getTreeList();
        System.out.println("parseObject ==> " + JSON.toJSONString(list));

        System.out.println("***********************************************************");
        DemoVO2 read = new ObjectMapper().readValue(jsonString, DemoVO2.class);
        List<Tree<String>> list1 = read.getTreeList();
        System.out.println("jackson ==> " + JSON.toJSONString(list1));

    }

结果如下:

JSONArray ==> {"name":"name","id":"1","extra":"extra"}
parseObject ==> [{"name":"name","id":"1"}]
***********************************************************
jackson ==> [{"name":"name","id":"1","extra":"extra"}]

其中JSONArray 解析出来的是正确的,parseObject 会丢失数据

期待的正确结果

数据正常输出

相关日志输出

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

附加信息

在dubbo3.2.11下,DemoVO2 这种类同样存在丢失问题,从provider到comsumer List里面的Tree就是没有具体数据的Tree了,但是如果直接返回的List<Tree>则数据正常

@zhaokjun zhaokjun added the bug Something isn't working label Mar 26, 2024
@zhaokjun zhaokjun changed the title [BUG] 对hutool的Tree使用JSON.parseObject 反序列化的问题 [BUG] 对包含hutool的Tree的java bean使用JSON.parseObject 反序列化的问题 Mar 26, 2024
@zhaokjun
Copy link
Author

补充:如果直接使用parseObject(text),debug时,里面的数据也是正常的,只有后面带class的时候会出现这种情况:parseObject(String text, Class clazz)

rowstop added a commit to rowstop/fastjson2 that referenced this issue Mar 29, 2024
@wenshao wenshao added this to the 2.0.49 milestone Apr 1, 2024
@wenshao wenshao added the fixed label Apr 7, 2024
@wenshao
Copy link
Member

wenshao commented Apr 14, 2024

https://github.com/alibaba/fastjson2/releases/tag/2.0.49
问题已修复,请用新版本

@wenshao wenshao closed this as completed Apr 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working fixed
Projects
None yet
Development

No branches or pull requests

2 participants