今天在做课设的时候发现一个问题,在使用json向前端传递数据时候抛出了异常。
产生的原因:我的数据表中有一张有关课程的表(course),这张表中间有两个比较特殊的字段,开课时间(starttime),结课时间(endtime)。与之对应的实体类中使用的成员的数据类型为sql.Date。操作数据的Mapper接口有一个根据老师的编号查询出有关这个老师的所有课程的方法。我在Controller层使用了Json返回数据。具体实现如下:
/** * 获取当前用户的所有课程 * @return */ @RequestMapping(value="get_crruentUser_course.action",produces= {"html/text;charset=utf-8"}) public @ResponseBody String getCrruentUserCourse(String crruentUserid) { JSONObject result = new JSONObject(); List<Course> list = null; String msg = ""; Integer code = 0; if(crruentUserid==null||crruentUserid=="") { msg = "没有获取到用户信息,请先登录"; code = 1; }else { msg = "成功获取到用户信息"; Integer teacherid = Integer.parseInt(crruentUserid); list = courseService.listCourseByTeacherid(teacherid); } result.put("msg", msg); result.put("code", code); result.put("coursrList", list); return result.toString(); }
在进行service层测试的时候一点问题也没有,本以为可以轻松一遍过,但是整合前端从浏览器端进行访问时剧报错了:
抛出了jsonEcxeption。这个问题是真的有点坑,我找了好久才发现是json在转成字符串时对sql.Date类型的数据并不支持。我又不想修改数据库,值能对数据库对应的实体类进行相关的完善。在starttime 和endtime的get方法上进行了数据转化。
public String getEndtime() { DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); //进行格式化处理转化为字符串是应为包含sql.date数据的对象在json中的toString方法中会报错 return df.format(strattime); } public String getStrattime() { DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); return df.format(strattime); }
让着两个方法返回字符串,着json转化的时候使用反射的方式就不会数据异常了。
Bean中包含sql.Date数据类型存放进json中转换问题
原文:https://www.cnblogs.com/huangliang11/p/10414443.html