前天,做spring boot框架的 @RestController @RequestMapping @RequestBody 使用post方法以body传递参数的实验,
但,使用postman测试post,总报错 500 服务器错误,
如下图:
遇到java类的问题,千万不要慌,去看Java控制台console的报错信息就能解决问题,
Java控制台console的报错信息,如下:
Cannot construct instance of XXX(… , exist) : cannot deserialize from Object value (…) at
根据控制台的报错:
Cannot construct instance of com.example.demo.User (no Creators, like default constructor, exist): cannot deserialize from Object value
(no delegate- or property-based Creator)
定位到了原因:
是实体类(User.java)中被人为添加了一个有参构造函数
public User(String name, String email) {this.name = name; this.email = email;},
从而导致JVM就不会再为实体类(User.java)添加默认的无参构造函数了,
而Java 用来处理 JSON 格式数据的类库 jackson 的反序列化还需要无参构造函数,
因此报错。
也就是说, Java 在处理 JSON 数据格式的时候,要使用 jackson 这个类库,而Jackson 处理 JSON 数据时是需要 deserialize 的,而反序列化还需要无参的构造函数,所以再遇到此类情况一定要在实体类中手工添加无参的构造函数,
解决办法:
在该实体类(User.java)中添加了一个无参构造函数
public User(){};
只需这个简短的一句话代码问题就解决了。
February03rd2021wednesday