当前位置:   article > 正文

关于返回响应时springBoot项目后端报错org.springframework.http.converter.HttpMessageNotWritableException的解决思路

org.springframework.http.converter.httpmessagenotwritableexception
在编写项目的过程中,controller中的一个任务在准备返回一个同一类型时,突然报错。一开始以为时泛型类型不适配带来的问题,多次调试依然得不到结果。后经过查询发现消息转换器异常的原因在于这个用于返回值的泛型类型忘记设置getter方法了。
@Data
// 定义一个返回值对象
public class R<T> implements Serializable {
    private int code;
    private T data;
    private String message;
    private String description;

    public R(int code, T data) {
        this.code = code;
        this.data = data;
    }

    public R(int code, T data, String message) {
        this.code = code;
        this.data = data;
        this.message = message;
    }

    public R(int code, T data, String message, String description) {
        this.code = code;
        this.data = data;
        this.message = message;
        this.description = description;
    }

    public R(ErrorCode errorCode){
        this(errorCode.getCode(), null, errorCode.getMessage(), errorCode.getDescription());
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
流传于网上的项目常常都会使用一个lombook包来简化代码编写。在ctrl+c, ctrl+v的过程中,常常会忘记给自己的类加上一个@data标签,因此对于类而言就少了getter和setter方法。加了这个标签后就可以运行成功了,当然你将属性改为公有或者自己编写getter方法都可以。记得给自己的类加上implements Serializable进行序列化
————————————————————————————————

为什么设置getter方法和进行序列化呢?这个响应体有关。
在响应前,常常会设置一个响应头为contentType:“application/json”
因此,spring会将返回的对象转换为json字符串给前端,这个过程在org.springframework.http.converter.HttpMessageConverter接口的实现类中完成的。
将对象转换为json字符串,通过反射获取对象的全部属性,并通过getter获取属性值。到这里,就可以完全理解这个异常生成的原因了。

写此文章,真勾八累。自省共勉。有收获就点个赞吧!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/679556
推荐阅读
相关标签
  

闽ICP备14008679号