alibaba / fastjson2

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

[QUESTION]使用Mybatis-plus的泛型枚举IEnum遇到的问题 #2682

Closed cyij2006 closed 3 months ago

cyij2006 commented 5 months ago

请描述您的问题

在实现IEnum接口的自定义枚举类中定义静态方法,导致json解析异常。

环境信息

枚举类:

import com.alibaba.fastjson2.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.baomidou.mybatisplus.annotation.IEnum;

public enum BizType implements IEnum<String> {

    COMMON("common", "通用");

    BizType(String value, String name) {
        this.value = value;
        this.name = name;
    }

    @EnumValue
    private final String value;
    private final String name;

    @JSONField(value = true)
    public String getValue() {
        return value;
    }

    public String getName() {
        return name;
    }

    public static void test123() {}
}

POJO:

import com.demo.test.entity.type.BizType;
import lombok.Data;

@Data
public class VM {

    private BizType bizType;
}

调用:

String str = "{\"bizType\":\"common\"}"; 

VM vm = JSON.parseObject(str, VM.class);

报错: WechatIMG2992

报错时的调试信息: WechatIMG2991

BizType.getValue()方法的返回类型被解析为java.io.Serializable,导致字段解析时,当成intValue在解析

尝试的修正方法

正常解析时的调试信息 WechatIMG2993

项目压缩包 test.zip

补充信息 实际项目环境是,fastjson2-2.0.43 + jdk17 + mybatis-plus-3.5.4.1 半年前把jdk从8升级到17,当时测试没有问题,之后没有再运行过项目 本周再启动环境,出现上述报错 升级到新的版本fastjson2-2.0.51和mybatis-plus-3.5.6后,还是会出现上述报错

不确定是否由mybatis-plus引起, 调试时,由于com.alibaba.fastjson2.reader.ORG_1_35_VM.readObject(Unknown Source)无法跟进,问题定位不太方便

请项目维护人员帮忙看看,感谢感谢!

wenshao commented 3 months ago

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