【发布时间】:2011-05-16 23:24:27
【问题描述】:
有谁知道我如何将一个对象(更具体地说是 List,来自数据库中的查询的结果)发送到我的 servlet,它是另一个 Java 应用程序,不在 Google App Engine 中。
更新:我在 GAE 中的 servlet 工作正常,它序列化了我的 List<Video> 结果:
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
String titulo = req.getParameter("titulo");
String json = "";
PersistenceManager pm = PMF.get().getPersistenceManager();
Query query = pm.newQuery("select from "+Video.class.getName()+ " where titulo.startsWith('"+titulo+"')");
List<Video> video = (List<Video>) pm.newQuery(query).execute();
json = new Gson().toJson(video);
System.out.println("SERIALIZED >> " + json);
res.setContentType("application/json");
res.setCharacterEncoding("UTF-8");
res.getWriter().write(json);
}
我的调用 servlet 有这个方法:
public void receberMetaDados(String titulo) throws IOException, Exception{
InputStream input = new URL("http://localhost:8888/serve?titulo="+titulo).openStream();
Reader reader = new InputStreamReader(input, "UTF-8");
List<Video> results = new Gson().fromJson(reader, new TypeToken<List<Video>>(){}.getType());
}
我得到以下异常:
com.google.gson.JsonParseException: JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@2d7440 未能反序列化 json 对象 [{"id":"30102010113847691504","titulo":"CIty of Angel"," descicao":"Um belo filme","date":"30/11/2010 13:38:47"},{"id":"30102010115514196289","titulo":"City of Angel","descricao": "Um belo filme","date":"30/11/2010 13:55:14"},{"id":"3010201011561620697","titulo":"City of Angel","descricao":"Um belo filme","date":"30/11/2010 13:56:01"},{"id":"3010201012829669834","titulo":"City of Angel","descricao":"Um belo filme", "date":"30/11/2010 14:08:29"},{"id":"3010201012849669427","titulo":"City of Angel","descricao":"Um belo filme","date" :"30/11/2010 14:08:49"},{"id":"3010201012919920893","titulo":"City of Angel","descricao":"Um belo filme","date":"30 /11/2010 14:09:19"}] 给定类型 java.util.List 在 com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:63) 在 com.google.gson.JsonDeserializationVisitor.invokeCustomDeserializer(JsonDeserializationVisitor.java:88) 在 com.google.gson.JsonDeserializationVisitor.visitUsingCustomHandler(JsonDeserializationVisitor.java:76) 在 com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:106) 在 com.google.gson.JsonDeserializationContextDefault.fromJsonArray(JsonDeserializationContextDefault.java:64) 在 com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:49) 在 com.google.gson.Gson.fromJson(Gson.java:568) 在 com.google.gson.Gson.fromJson(Gson.java:515) 在 com.google.gson.Gson.fromJson(Gson.java:484) 在 classes.Manip.receberMetaDados(Manip.java:64) 在 servlet.OurTube_Servlet.buscar(OurTube_Servlet.java:105) 在 servlet.OurTube_Servlet.doPost(OurTube_Servlet.java:55) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 在 java.lang.Thread.run(Thread.java:662) 引起:java.lang.RuntimeException:类类的无参数构造函数。视频不存在。使用 Gson 为该类型注册一个 InstanceCreator 以解决此问题。 在 com.google.gson.MappedObjectConstructor.constructWithNoArgConstructor(MappedObjectConstructor.java:64) 在 com.google.gson.MappedObjectConstructor.construct(MappedObjectConstructor.java:53) 在 com.google.gson.JsonObjectDeserializationVisitor.constructTarget(JsonObjectDeserializationVisitor.java:40) 在 com.google.gson.JsonDeserializationVisitor.getTarget(JsonDeserializationVisitor.java:56) 在 com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:109) 在 com.google.gson.JsonDeserializationContextDefault.fromJsonObject(JsonDeserializationContextDefault.java:73) 在 com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:51) 在 com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.deserialize(DefaultTypeAdapters.java:548) 在 com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter.deserialize(DefaultTypeAdapters.java:510) 在 com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:50) ... 25 更多
不知道怎么回事,谢谢你的帮助。
【问题讨论】:
标签: java google-app-engine jsp servlets