将字符串还原为对象时报错
Cannot construct instance of java.lang.StringBuffer
(although at least one Creator exists)
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
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方法,就无法处理,导致报错
public void setMessage(String message) {
this.message.append(message);
}