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]2.0.6反序列化中List里面有Long类型字段报错com.alibaba.fastjson2.reader.FieldReaderListInt64 #409

Closed
waitlife opened this issue Jun 5, 2022 · 11 comments
Labels
bug Something isn't working
Milestone

Comments

@waitlife
Copy link

waitlife commented Jun 5, 2022

版本:

2.0.6

实体类:

public class TeacherJson {
    private static final long serialVersionUID = 1L;

    @JsonProperty("user_serial")
    private Long userSerial;

    @JsonProperty("user_name")
    private String userName;

    private List<String> codes;

    @JsonProperty("dept_list")
    private List<DeptList> deptList;

    @JsonProperty("manage_class_ids")
    private List<DeptList> manageClassIds;

    @JsonProperty("user_deps")
    private List<String> userDeps;

    public Long getUserSerial() {
        return userSerial;
    }

    public void setUserSerial(Long userSerial) {
        this.userSerial = userSerial;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public List<String> getCodes() {
        return codes;
    }

    public void setCodes(List<String> codes) {
        this.codes = codes;
    }

    public List<DeptList> getDeptList() {
        return deptList;
    }

    public void setDeptList(List<DeptList> deptList) {
        this.deptList = deptList;
    }

    public List<DeptList> getManageClassIds() {
        return manageClassIds;
    }

    public void setManageClassIds(List<DeptList> manageClassIds) {
        this.manageClassIds = manageClassIds;
    }

    public List<String> getUserDeps() {
        return userDeps;
    }

    public void setUserDeps(List<String> userDeps) {
        this.userDeps = userDeps;
    }

    public String toJson() {
        return JSON.toJSONString(this);
    }

    @Override
    public String toString() {
        return this.toJson();
    }
}

public class DeptList {
    private static final long serialVersionUID = 1L;

    @JsonProperty("dept_id")
    private Long deptId;

    @JsonProperty("pt_node_path_name")
    private String ptNodePathName;

    @JsonProperty("dept_name")
    private String deptName;

    @JsonProperty("is_grade")
    private String isGrade;

    public Long getDeptId() {
        return deptId;
    }

    public void setDeptId(Long deptId) {
        this.deptId = deptId;
    }

    public String getPtNodePathName() {
        return ptNodePathName;
    }

    public void setPtNodePathName(String ptNodePathName) {
        this.ptNodePathName = ptNodePathName;
    }

    public String getDeptName() {
        return deptName;
    }

    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }

    public String getIsGrade() {
        return isGrade;
    }

    public void setIsGrade(String isGrade) {
        this.isGrade = isGrade;
    }
}

调用方法:

JSONObject teacherObject = 调用函数;//此处返回正确的JSONObject
List teacherList = teacherObject.getList("records", TeacherJson.class);

样例数据:

{
"total": 1,
"records": {
"user_serial": 2201266,
"user_name": "朱忠恕",
"codes": [
"Teacher"
],
"dept_list": [
{
"dept_id": 200882,
"pt_node_path_name": "/测试学校",
"dept_name": "办公室",
"is_grade": 0
}
],
"manage_class_ids": [],
"user_deps": [
200882
]
}
}

报错提示:

com.alibaba.fastjson2.reader.FieldReaderListInt64

尝试方法:

修改实体DeptList中的deptId类型为String,且将它的getDeptId和setDeptId方法都修改为String类型,不会报错。

@waitlife waitlife added the bug Something isn't working label Jun 5, 2022
@wenshao
Copy link
Member

wenshao commented Jun 5, 2022

类的信息不完整,无法构造testcase,需要补充 WedsTeacherDeptList这个类的信息

wenshao added a commit that referenced this issue Jun 5, 2022
@waitlife
Copy link
Author

waitlife commented Jun 5, 2022

上面打错了,已更正。这里要科学上网,好麻烦,既卡又慢,还时断时续的

@wenshao
Copy link
Member

wenshao commented Jun 5, 2022

cc75613
如这里, 是因为records这个字段不存在

@waitlife
Copy link
Author

waitlife commented Jun 5, 2022

抱歉,样例数据少打了二个字段,teacherObject中实际上是有records这个字段的。
{
"total": 1,
"records": {
"user_serial": 2201266,
"user_name": "朱忠恕",
"codes": [
"Teacher"
],
"dept_list": [
{
"dept_id": 200882,
"pt_node_path_name": "/测试学校",
"dept_name": "办公室",
"is_grade": 0
}
],
"manage_class_ids": [],
"user_deps": [
200882
]
}
}

@wenshao
Copy link
Member

wenshao commented Jun 5, 2022

输入的是一个JSONObject,你想要的是一个List,你看下哪里搞错了?

@wenshao
Copy link
Member

wenshao commented Jun 5, 2022

https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.7-SNAPSHOT/
针对你这种情况,我也做了支持,你可以用2.0.7-SNAPSHOT验证

@wenshao wenshao added this to the 2.0.7 milestone Jun 5, 2022
@waitlife
Copy link
Author

waitlife commented Jun 5, 2022

dept_list和manage_class_ids其实都是JSONArray对象数组来的,之前用1.X一直都可正常反序列化的。

@oday-xiexin
Copy link

输入的是一个JSONObject,你想要的是一个List,你看下哪里搞错了?

这个 fix了吗 我这也遇到了类似的。不过我用的兼容包
com.alibaba
fastjson
2.0.7-SNAPSHOT
提示不存在

@wenshao
Copy link
Member

wenshao commented Jun 6, 2022

@oday-xiexin 需要配置这个maven snapshot仓库
https://oss.sonatype.org/content/repositories/snapshots/

@wenshao
Copy link
Member

wenshao commented Jun 11, 2022

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

@wenshao wenshao closed this as completed Jun 11, 2022
@waitlife
Copy link
Author

谢谢!已解决

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants