【Java】无法返回序列化JSON Resolved [org.springframework.http.converter.HttpMessageNotWritableException

 

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类型的成员

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值