最近在做一个微信小程序,由于前后端完全分离,当页面需要列表展示内容时(例如:购物车商品展示)需要从后台(java的servlet)完全把数据以集合的形式 传递到前端的js。
因此后台使用到了【List对象集合–> JSONArray数组–> String字符串】的方法。
但是遇到了很多困难,今记录,供缘人参考。
先上代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//创建ArrayList数组
List<Task> tasks= new ArrayList<Task>();
try {
ResultSet res = DoSQL.executeQuery("SELECT * FROM task");
while (res.next()) {
Task A = new Task(res.getInt("id"));
System.out.println(A.toString());
tasks.add(A);
}
} catch (SQLException e) {
// TODO 自动生成的 catch 块
System.out.println("获取res查询结果集失败");
e.printStackTrace();
}
response.setContentType("text/html;charset=GBK");//防止浏览器无法显示中文
//创建JSON集合
JSONArray jsonarray = JSONArray.fromObject(tasks);
//把JSON集合转出String字符串输出
String str = jsonarray.toString();
Writer out = response.getWriter();
out.write(str);
out.flush();
}
java.lang.reflect.InvocationTargetException Description The server encountered an unexpected condition that prevented it from fulfilling the request)
两个问题:
**1.**可能导包不全,使用JSONArray.fromOb**j**ect(tasks)
方法把List集合转化成JSON格式需要六个关键包【 * * 使用JSON时,除了要导入JSON网站上面下载的json-lib-2.2-jdk15.jar包之外,还必须有其它几个依赖包:】
- *commons-beanutils.jar,
- *commons-httpclient.jar,
- *commons-lang.jar,
- *ezmorph.jar,
- *commons-collections.jar
- *commons-logging.jar
下载地址:JSONObject所需的六个包
**2.**可能是List对象集合在转化成JSON数据时,类型不支持 ,json转换的时候类型匹配不上的问题了。因为对象内都有除了基本类型的数据,比如Date类型的,那么在对象转json时,JSONObject就无法及时的将Date类型转为Json所支持的类型了。其实网上还有说是数据库里的Date包和后台的date包类型不一致没有延时的问题。
servlet运行成功,将存于List里面所有对象的参数转化成了JSON格式,传到前端: