DefaultHandlerExceptionResolver : 
Resolved [org.springframework.http.converter.HttpMessageNotWritableException: 
Could not write JSON: (was java.lang.NullPointerException); 
nested exception is com.fasterxml.jackson.databind.JsonMappingException: 
(was java.lang.NullPointerException) 
(through reference chain: com.luck.cloud.base.vo.Result2VO["ok"])]
​@Data
public class Result2VO<T> implements Serializable {

    private static final long serialVersionUID = 1L;

    private String code;

    private String message;

    private T data;

    ...

    public boolean isOk(){
        return this.code.equals("200");
    }
}

直接原因:数据序列化时反射调用isOk方法,此时code为null

解决方法:

1、给code一个初始值

2、用相等==做比较 

3、修改方法名,不要以is开头

​@Data
public class Result2VO<T> implements Serializable {

    private static final long serialVersionUID = 1L;

    // 1、给code添加一个初始值
    private String code = "200";

    private String message;

    private T data;

    ...

    // 2、用相等==做比较 
    // 3、修复方法名
    public boolean isOk(){
        return this.code == "200";
    }
}

​


思考:为什么会调用isOk方法?

答:在spring反向解析对象时,会调用is开头返回boolean类型的方法(有趣的设计),至于为什么会这么调用与框架的约定有关

总结:

实体类和vo中不要使用is作为前缀命名boolean类型的成员

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e 3 个月前
8c391e04 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐