Java Google应用程序引擎-如何将对象返回到我的servlet?
有人知道我如何将一个对象(更具体地说是一个Java Google应用程序引擎-如何将对象返回到我的servlet?,java,google-app-engine,jsp,servlets,Java,Google App Engine,Jsp,Servlets,有人知道我如何将一个对象(更具体地说是一个列表)发送到我的servlet,它是另一个Java应用程序,不在Google App Engine中 更新:我在GAE中的servlet工作正常,它序列化了我的列表结果: public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { String titulo = req.getParameter("titulo"); S
列表
)发送到我的servlet,它是另一个Java应用程序,不在Google App Engine中
更新:我在GAE中的servlet工作正常,它序列化了我的
列表
结果:
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 doGet(HttpServletRequest-req,HttpServletResponse-res)抛出IOException{
字符串titulo=req.getParameter(“titulo”);
字符串json=“”;
PersistenceManager pm=PMF.get().getPersistenceManager();
Query Query=pm.newQuery(“从“+Video.class.getName()+”中选择,其中titulo.startsWith(“+titulo+”)”);
List video=(List)pm.newQuery(query.execute();
json=new Gson().toJson(视频);
System.out.println(“序列化>>”+json);
res.setContentType(“应用程序/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());
}
public void receiberMetadados(字符串titulo)抛出IOException,Exception{
InputStream输入=新URL(“http://localhost:8888/serve?titulo=“+titulo.openStream();
读卡器=新的InputStreamReader(输入,“UTF-8”);
List results=new Gson().fromJson(读取器,new TypeToken(){}.getType());
}
我得到以下例外情况:
com.google.gson.JsonParseException:JsonDeserializer com.google.gson.DefaultTypeAdapters$CollectionTypeAdapter@2d7440未能反序列化json对象[{“id”:“301020101113847691504”,“titulo”:“天使之城”,“descripao”:“Um belo filme”,“date”:“30/11/2010 13:38:47”},{“id”:“301020010115514196289”,“titulo”:“天使之城”,“descripao”:“Um belo filme”,“date:”30/11/2010 13:55:14“,”{“id:”30101011561620697“,”Titolo:”天使之城“,”描述“,”Um belo filme“,”date:”30/11/2010 13:56:01“,{“id:”30101012829669834“,”Titolo:”天使之城“,”描述“,”Um belo filme”,“date:”30/11/2010 14:08:29“,{“id:”301201010128496627,“Titolo:”天使之城“,”描述“,”Um belo filme“,”日期:““30/11/2010 14:08:49”},{“id:“3010201012919920893”,“Titolo:“天使之城”,“descricao:“Um belo filme”,“日期:”:“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\u servlet.buscar(OurTube\u servlet.java:105)
在servlet.OurTube\u servlet.doPost(OurTube\u 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)
运行(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个
我不知道出了什么问题,谢谢你的帮助。这取决于情况。如果它是作为HTTP请求的HTTP响应返回的,那么你需要将其转换为符合特定格式的字符串。最流行的是XML和JSON。另一端只需读入XML或JSON字符串,然后重新创建
List<Result> results = someDAO.list();
String json = new Gson().toJson(list);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
InputStream input = new URL("http://example.com/servleturl").openStream();
Reader reader = new InputStreamReader(input, "UTF-8");
List<Result> results = new Gson().fromJson(reader, new TypeToken<List<Result>>(){}.getType());
public class Video {
public Video() {
// Always keep default c'tor alive whenever you
// supply another c'tor in a Javabean class.
}
}