全部
技术
PHP
MySQL
前端
Linux
JAVA
工具
纪念日计算器
邮记星
个人记账
笔记侠
历史上的今天
生日密码
生日书
生日密码
生日花语
博古通今
三十六计
鬼谷子
笑林广记
本草纲目
山海经
唐诗宋词
宋词300首
唐诗300首
退出
登录
注册
编辑文章
选择分类
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); } ```
保存文章