将字符串还原为对象时报错

Cannot construct instance of java.lang.StringBuffer (although at least one Creator exists)

  1. 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

  1. public class A implements Serializable {
  2. public A(){}
  3. private static final long serialVersionUID = -6712451834532935737L;
  4. private StringBuffer message = new StringBuffer();
  5. public void setMessage(StringBuffer message) {
  6. this.message = message;
  7. }
  8. }

按照提示:不能构造java.lang.StringBuffer的实例。StringBuffer ‘(至少存在一个Creator):没有String参数构造函数/工厂方法来反序列化String值。

我的理解

StringBuffer没有入参为string的构造函数,但是java自带的StringBuffer是有这个构造函数的,所以这个肯定不对。

解决方案

給对象message属性添加一个入参为String类型的set方法即可,推测jackson反序列化是通过对象的set方法来实现的,由于序列话后,StringBuffer变成了String类型,如果不提供入参为String类型的set方法,就无法处理,导致报错

  1. public void setMessage(String message) {
  2. this.message.append(message);
  3. }