Val*_*lva 2 java google-app-engine jsp servlets
有没有人知道如何发送一个对象,更具体的一个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);
}
Run Code Online (Sandbox Code Playgroud)
我的调用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());
}
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
Java的:在org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)在java.lang.Thread.run(Thread.java:662)工艺(Http11Protocol.java:588)所致.lang.RuntimeException:类类的No-args构造函数.Video不存在.使用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上的com.google.gson.JsonDeserializationVisitor.getTarget(JsonDeserializationVisitor.java:56).
我不知道出了什么问题,谢谢你的协助.
那要看.如果要在HTTP请求上作为HTTP响应返回,则需要将其转换为遵循特定格式的字符串.流行的是XML和JSON.另一端只需读取XML或JSON字符串,然后根据此信息重新创建列表.
这是JSON和Google Gson的一个例子,它能够将Java对象转换为JSON,反之亦然.
被调用的servlet:
List<Result> results = someDAO.list();
String json = new Gson().toJson(list);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
Run Code Online (Sandbox Code Playgroud)
调用servlet:
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());
Run Code Online (Sandbox Code Playgroud)
更新:根据例外情况:
引起:java.lang.RuntimeException:类类的No-args构造函数.Video不存在.
这是非常自我解释的.提供默认构造函数.
public class Video {
public Video() {
// Always keep default c'tor alive whenever you
// supply another c'tor in a Javabean class.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4404 次 |
| 最近记录: |