问题解决
问题解释
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中的数据赋值给对象的属性