springboot异常解决

问题解决

问题解释

Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class com.test.entity.User] with preset Content-Type 'null']”
出现这个问题表明spring在尝试将user对象序列化为http响应时,找不到适当的消息转化器。

问题解决

由于springboot默认使用jackson作为json序列化和反序列化的工具,所以需要包含jackson的依赖

  <properties>
    <java.version>1.8</java.version>
    <jackson-version>2.13.1</jackson-version>
  </properties>
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson-version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson-version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson-version}</version>
    </dependency>

除了这个原因,由于在项目中接口返回的是一个对象,对象没有定义getter和setter方法会报错
拿本例子来看, 没有定义对应的方法会出错

public class User {
    private int id;
    private String username;
    private String password;
    public  User(int id,String username,String password){
        this.id=id;
        this.username=username;
        this.password=password;
    }
    
}

更改后如下

public class User {
    private int id;
    private String username;
    private String password;
    public  User(int id,String username,String password){
        this.id=id;
        this.username=username;
        this.password=password;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

深入解析

在spring的rest接口中,通常会涉及json的序列化和反序列化。
jackson这样的库依赖于getter和setter方法把对象转化为json格式和从json格式转化为对象

  • 序列化问题:将user对象转化为json时,没有getter方法json库就无法访问对象的属性
  • 反序列化问题:将json转换为对象时,没有setter方法,json处理库无法将json中的数据赋值给对象的属性
posted @ 2024-06-12 11:15  Sun-Wind  阅读(4)  评论(0编辑  收藏  举报