[alibaba/fastjson]反序列化枚举,错误的枚举值不抛异常,版本:1.2.36

2025-11-24 107 views
2

一个错误的枚举值,反序列化时不抛异常

回答

9

下面是测试案例代码:

public enum Code{
    SUCCESS, FAILURE
}

public static class Result{
    private int id;
    private Code code;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public Code getCode() {
        return code;
    }
    public void setCode(Code code) {
        this.code = code;
    }
    @Override
    public String toString() {
        return JSON.toJSONString(this);
    }
}

public static void main(String[] args) {
    String jsonText = "";
    jsonText = "{\"code\":\"SUCCESS\",\"id\":1}";
    System.out.println(JSON.parseObject(jsonText, Result.class));
    jsonText = "{\"code\":\"FAILURE\",\"id\":2}";
    System.out.println(JSON.parseObject(jsonText, Result.class));
    jsonText = "{\"code\":\"ERROR\",\"id\":3}";
    System.out.println(JSON.parseObject(jsonText, Result.class));
}

测试结果: {"code":"SUCCESS","id":1} {"code":"FAILURE","id":2} {"id":3}

5

1.2.40也发现了同样的问题,而且当结构化Json后就会抛JSONException异常,不结构化是不抛异常。

1

非法枚举值不抛异常问题,发现只有在JsonArray中对象的key和value之间有空格的话就会抛JSONException异常,没空格的话不抛异常,赋了null值。@wenshao

3

最初抛错的,后来改为不抛错,但改的不够彻底(比如你说的有空格的场景)。不抛错有什么问题?

2

@wenshao 感谢回复,这个问题会导致我们程序在处理有空格json和无空格json的行为不一致,在1.2.40版本中有没有什么方法可以使fastJson处理非法值时都抛异常?

9

希望能有个非法值抛异常的方式