PHP技术那点事
全部
技术
PHP
MySQL
前端
Linux
JAVA
退出
编辑文章
选择分类
PHP
MySQL
前端
Linux
Java
工具
选择专栏
设计模式
java基础
Angular学习
Java面试题
描述:
Cannot construct instance of `StringBuffer`
封面图上传 :
+
点击上传图片
### 将字符串还原为对象时报错 Cannot construct instance of `java.lang.StringBuffer` (although at least one Creator exists) ```java com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `java.lang.StringBuffer` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ``` ### 我的类 存在一个属性message,他的类型是StringBuffer ```java public class A implements Serializable { public A(){} private static final long serialVersionUID = -6712451834532935737L; private StringBuffer message = new StringBuffer(); public void setMessage(StringBuffer message) { this.message = message; } } ``` 按照提示:不能构造java.lang.StringBuffer的实例。StringBuffer '(至少存在一个Creator):没有String参数构造函数/工厂方法来反序列化String值。 ### 我的理解 StringBuffer没有入参为string的构造函数,但是java自带的StringBuffer是有这个构造函数的,所以这个肯定不对。 ### 解决方案 給对象message属性添加一个入参为String类型的set方法即可,推测jackson反序列化是通过对象的set方法来实现的,由于序列话后,StringBuffer变成了String类型,如果不提供入参为String类型的set方法,就无法处理,导致报错 ```java public void setMessage(String message) { this.message.append(message); } ```
保存文章