没有参数的 java.lang.RuntimeException : Failed to invoke public com. example.syncapp.MessageBase()

标签 java android json gson runtimeexception

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException {

  System.out.println(request.getParameter("msg").toString());
  String data = request.getParameter("msg").toString();
  Gson gson = new Gson();
  MessageBase msggg = gson.fromJson(data, MessageBase.class);
  //System.out.println(msggg.Id + msggg.MessageText);
}

public abstract class MessageBase implements Serializable {
  public int Id;
  public String MessageText;
  public Date ReceiveDate;
}

public class SyncSmsMessage extends MessageBase {
  public String SenderNum;  
}

代码一直有效,直到 MessageBase msggg=gson.fromJson(data, MessageBase.class);。我得到这个异常(exception):

java.lang.RuntimeException: Failed to invoke public com.example.syncapp.MessageBase() with no args
  at com.google.gson.internal.ConstructorConstructor$2.construct(ConstructorConstructor.java:94)
  at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:162)
  at com.google.gson.Gson.fromJson(Gson.java:795)
  at com.google.gson.Gson.fromJson(Gson.java:761)
  at com.google.gson.Gson.fromJson(Gson.java:710)
  at com.google.gson.Gson.fromJson(Gson.java:682)
  at AndroidServlet.doPost(AndroidServlet.java:75)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

我需要做什么? 我将 .jar 放在 lib 文件夹中,我认为 tomcat 可以很好地加载 .jar。

最佳答案

来自 GSON User Guide :

While deserializing an Object, Gson needs to create a default instance of the class [...] Well-behaved classes that are meant for serialization and deserialization should have a no-argument constructor

你的问题是 GSON 的 Instance Creator 在你想要反序列化 JSON 响应的类中需要一个无参数构造函数,即 MessageBase

否则,你需要自己写Instance Creator,比如this .

关于没有参数的 java.lang.RuntimeException : Failed to invoke public com. example.syncapp.MessageBase(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15328324/

相关文章:

java - 通用对象的哈希函数

java - Maven:Eclipse 未在具有父 pom 的项目中正确配置路径

java - 传递到 URI 的参数无效

json - Azure Stream Analytics 如何处理多个输出表?

java - 如何构建对java服务器的请求?

android - 如何在Android上检查互联网访问(发送和接收数据是否成功)?

Android:如何从 Assets 中播放视频?

java - Kotlin 无法获取所需的类型干扰 Array<Uri>!找到数组<Uri?>

json - 如何创建具有多个数组的 JSON 对象?

javascript - 通过对象值渗透 JSON 响应