个人经历教训,答案在末尾最
近况说明:最近在写一个论坛系统的后台,其中涉及到文章类(article)与评论类(article_comment)的关系,我在article类中创建了一个获取文章评论的function【该方法获取文章所有评论,组成JsonArray集合后再转化为String格式返回】:
public String getArticalComments() {
//获取文章评论集合
List<artical_comment> article_comments= new ArrayList<article_comment>();
try {
ResultSet res = DoSQL.executeQuery("SELECT *FROM article_comment WHERE artical_id = " + this.article_id);//通过文章id寻找评论
while (res.next()) {
System.out.println("获取评论id:"+res.getInt("id"));
artical_comment A = new artical_comment(res.getInt("id"));//通过文章id寻找到评论id,并创建评论类
//System.out.println(A.toString());
artical_comments.add(A);//将评论添加到对象数组
}
System.out.println(article_comments);
} catch (SQLException e) {
// TODO 自动生成的 catch 块
System.out.println("获取res查询结果集失败");
e.printStackTrace();
}
//创建JSON集合
JSONArray jsonarray = JSONArray.fromObject(artical_comments);
System.out.println("转换jsonarray后:"+jsonarray);
//把JSON集合转出String字符串输出
String str = jsonarray.toString();
System.out.println("转换str后:"+str);
return str;//str代表转化成String格式后的某文章评论集合
}
起初发现控制台打印出来的str为{} 即 空,通过调试发现,JSONArray jsonarray = JSONArray.fromObject(article_comments);
这一步得到的jsonarray也为空,但是List<article_comment> article_comments= new ArrayList<article_comment>();
artical_comments这个集合的内容不为空。
这就说明,问题发生在JSONArray jsonarray = JSONArray.fromObject(article_comments);
这一行代码上面了,也就是list对象集合转json格式造成异常,一番搜索,得出结果【划重点】:
答案:
SONArray.fromObject(object)在对Object转换的时候是按照domain类中的所有getXXX()方法进行转换的。如果你在类中写了非属性的getXXX()方法,那么返回给你的就会有XXX属性了,如果在object中没有写get方法,那么转化为jsonArray的时候是获取不到值的。