fastjson ThrowableDeserializer 的deserialze对自有变量变量无法注入

2nbm6dog  于 2021-11-27  发布在  Java
关注(0)|答案(2)|浏览(367)

查看代码后发现是ThrowableDeserializer中的otherValues没有写完,应该在117行生成 ex 后,将otherValues注入 ex

jgovgodb

jgovgodb1#

能提供重现问题的testcase么?

8oomwypt

8oomwypt2#

throw类

/**
 * @author ShanRen(xinyu.jxy)
 * @version $Id: TestThrow.java, v 0.1 2016-06-23 4:05 PM xinyu.jxy Exp $$
 */
public class TestThrow extends RuntimeException {

    private String message;
    private String exception;
    private String javaClassName;

    public TestThrow() {
    }

    public TestThrow(String message, Throwable cause) {
        super(message, cause);
        this.message=message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
    public void setException(String exception) {
        this.exception = exception;
    }
    public void setJavaClassName(String javaClassName) {
        this.javaClassName = javaClassName;
    }
    public String getMessage() {
        return message;
    }
    public String getException() {
        return exception;
    }
    public String getJavaClassName() {
        return javaClassName;
    }
}

运行函数

public class Main {
    public static void main(String[] args) {
        String jsonString="{\"exception\":\"FileNotFoundException\",\"javaClassName\":\"java.io.FileNotFoundException\",\"message\":\"File does not exist: /test001/ok.jpg\"}";
        TestThrow testThrow= JSON.parseObject(jsonString,TestThrow.class);
        System.out.println(testThrow.getMessage()); //有值,利用构造函数写入的
        System.out.println(testThrow.getException()); //未注入
        System.out.println(testThrow.getJavaClassName()); //未注入

    }
}

具体分析看 http://www.atatech.org/articles/51285

相关问题