Кто-нибудь знает, как я могу отправить объект, а точнее List
, результат запроса в базе данных, в мой сервлет, который является другим приложением Java и отсутствует в Google App Engine.
Обновление : Мой сервлет в GAE работает нормально, он сериализует мой 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);
}
Мой вызывающий сервлет имеет этот метод:
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" descricao ":" Um belo filme "," date ":" 30/11/2010 13:38:47 "}, {" id ":" 30102010115514196289 "," titulo ":" Город Ангела "," descricao ": "Um belo filme", "date": "30/11/2010 13:55:14"}, {"id": "3010201011561620697", "titulo": "Город Ангела", "descricao": "Um belo filme "," date ":" 30/11/2010 13:56:01 "}, {" id ":" 3010201012829669834 "," titulo ":" Город Ангела "," 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": "Город ангелов", "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)
в классах. Manip.receberMetaDados (Manip.java:64)
at servlet.OurTube_Servlet.buscar (OurTube_Servlet.java:105)
at 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: конструктор без аргументов для классов классов. Видео не существует. Зарегистрируйте InstanceCreator в Gson для этого типа, чтобы решить эту проблему.
на 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
Я не знаю, что не так, спасибо вам за помощь.