fastjson2
fastjson2 copied to clipboard
[BUG] Exception in JSONObject.toJavaObject concerning Enum
问题描述
类似 #2531,fastjson2和fastjson 在JSONObject.toJavaObject 对Enum的处理不一致。fastjson2没有抛异常而fastjson报错。
环境信息
- OS信息: [MacOS 12.7.4 M1 Pro 16 GB]
- JDK信息: [Openjdk 17.0.6]
- 版本信息:[Fastjson 2.0.49]
重现步骤
import com.alibaba.fastjson2.JSON;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class Issue1106Mutated_127 {
@Test
public void test() {
assertSame(UserStatus.NORMAL, JSON.parseObject("{\"state\":0}").toJavaObject(User.class).state);
assertEquals(UserStatus.LOCKED, JSON.parseObject("{\"state\":1}").toJavaObject(User.class).state);
assertNull(JSON.parseObject("{\"state\":-1}").toJavaObject(User.class).state);
}
@Test
public void testfj() {
assertSame(UserStatus.NORMAL, com.alibaba.fastjson.JSON.parseObject("{\"state\":0}").toJavaObject(User.class).state);
assertEquals(UserStatus.LOCKED, com.alibaba.fastjson.JSON.parseObject("{\"state\":1}").toJavaObject(User.class).state);
assertNull(com.alibaba.fastjson.JSON.parseObject("{\"state\":-1}").toJavaObject(User.class).state);
}
public enum UserStatus {
NORMAL(0),
LOCKED(1);
private final byte code;
UserStatus(int code) {
this.code = (byte) code;
}
public byte getCode() {
return this.code;
}
}
public class User {
public UserStatus state;
}
}
期待的正确结果
期望两者统一出一个合理的处理方式
相关日志输出
com.alibaba.fastjson2.JSONException: No enum ordinal issues.Issue1106Mutated_127.UserStatus.-1
at com.alibaba.fastjson2.reader.ObjectReaderImplEnum.readObject(ObjectReaderImplEnum.java:238)
at com.alibaba.fastjson2.reader.FieldReader.acceptAny(FieldReader.java:456)
at com.alibaba.fastjson2.reader.ObjectReaderAdapter.createInstance(ObjectReaderAdapter.java:659)
at com.alibaba.fastjson.JSONObject.toJavaObject(JSONObject.java:1011)
at Issue1106Mutated_127.testfj(Issue1106Mutated_127.java:20)
https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson/2.0.50-SNAPSHOT/ 问题已修复,请帮忙用2.0.50-SNAPSHOT版本验证下
经验证已修复,辛苦wenshao
https://github.com/alibaba/fastjson2/releases/tag/2.0.50 2.0.50已发布,请用新版本