做一个web应用 浏览记录用到ajax请求,将List<Product> list用JSONArray.fromObject(list) 转换成json格式时莫名其妙地报错
报错如下:
net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
at net.sf.json.JSONObject.defaultBeanProcessing(JSONObject.java:818)
at net.sf.json.JSONObject._fromBean(JSONObject.java:699)
at net.sf.json.JSONObject.fromObject(JSONObject.java:172)
at net.sf.json.AbstractJSON._processValue(AbstractJSON.java:274)
at net.sf.json.JSONObject._processValue(JSONObject.java:2655)
at net.sf.json.JSONObject.processValue(JSONObject.java:2721)
at net.sf.json.JSONObject.setInternal(JSONObject.java:2736)
at net.sf.json.JSONObject.setValue(JSONObject.java:1424)
at net.sf.json.JSONObject.defaultBeanProcessing(JSONObject.java:765)
at net.sf.json.JSONObject._fromBean(JSONObject.java:699)
at net.sf.json.JSONObject.fromObject(JSONObject.java:172)
at net.sf.json.AbstractJSON._processValue(AbstractJSON.java:274)
at net.sf.json.JSONArray._processValue(JSONArray.java:2513)
at net.sf.json.JSONArray.processValue(JSONArray.java:2538)
at net.sf.json.JSONArray.addValue(JSONArray.java:2525)
at net.sf.json.JSONArray._fromCollection(JSONArray.java:1056)
at net.sf.json.JSONArray.fromObject(JSONArray.java:123)
at net.sf.json.JSONArray.fromObject(JSONArray.java:105)
at com.itheima.utils.JsonUtil.list2json(JsonUtil.java:45)
at com.itheima.utils.JsonUtil.main(JsonUtil.java:113)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:2170)
at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1332)
at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:770)
at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:846)
at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
at net.sf.json.JSONObject.defaultBeanProcessing(JSONObject.java:749)
... 19 more
Caused by: java.lang.IllegalArgumentException
at java.sql.Date.getHours(Date.java:187)
... 29 more
Product javabean如下
public class Product implements Serializable{//所有javabean都建议序列化 否则写不到硬盘上
private String pid;
private String pname;
private Double market_price;
private Double shop_price;
private String pimage;
private Date pdate;
private Integer is_hot=0;//是否热门 1:热门 0:否
private String pdesc;
private Integer pflag=1;//是否下架 1:下架 0:未下架
//属于哪个分类
private Category category;
//get set方法省略 .....
}
Category自定义对象
Date 日期对象
其他都是基本类型包装类
从数据库查询完毕后转json就是报错,改了一晚上,刚刚发现错误,一直抓着JSONObject不放,调了好久也没有调好,最后的at java.sql.Date.getHours(Date.java:187)异常一直没有引起我的注意,以为系统自定义的类,我没法改,可问题关键就在这,list对象内有个成员是Date API就不会转换了,之前的beanutils封装请求数据也是一样,还要自己注册一个date转换方法,所以说date类型还是直接用string比较省事,数据库兼容,java代码又何必自找麻烦。
将date值都设置为null就好了 我的浏览记录功能恰好有用不到这个属性值。。