今天,在我想要将List<User>转换为json数据返回时与遇到了两个问题:
net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
这个异常首先是因为User类中有Date类型的数据,在JSONArray.fromObject(list)时会出现这个错误,所以解决方法有两种:
1. 修改实体类Date类型的get方法(不过,不建议直接修改实体类的get方法):
public String getUserBirthday() { return new Date(userBirthday.getTime()); }
不过这个转换成json数据后,样子是这样的:
显然不是我所想要的,所以加一个工具类,格式化日期:
package com.utils; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class JsonDateValueProcessor implements JsonValueProcessor { private String datePattern = "yyyy-MM-dd HH:mm:ss"; public JsonDateValueProcessor() { super(); } public JsonDateValueProcessor(String format) { super(); this.datePattern = format; } public Object processArrayValue(Object value, JsonConfig jsonConfig) { return process(value); } public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { return process(value); } private Object process(Object value) { try { if (value instanceof Date) { SimpleDateFormat sdf = new SimpleDateFormat(datePattern,Locale.UK); return sdf.format((Date) value); } return value == null ? "" : value.toString(); } catch (Exception e) { return ""; } } public String getDatePattern() { return datePattern; } public void setDatePattern(String pDatePattern) { datePattern = pDatePattern; } }
然后在Action中添加:
JsonConfig config = new JsonConfig(); JsonDateValueProcessor jsonValueProcessor = new JsonDateValueProcessor(); config.registerJsonValueProcessor(Date.class, jsonValueProcessor); // 把日期格式化了 config.setExcludes(new String[] {"uploadSet","user_barrageSet","user_likeSet","user_favSet"}); //忽略集合 JSONArray userlist = JSONArray.fromObject(list, config);
得到的效果:
2. 把这个Date类型的数据,不使用Date类型而使用String类型。
扫描二维码关注公众号,回复:
1064311 查看本文章
![](/qrcode.jpg)
private String userBirthday;
另外一个问题则是:
net.sf.json.JSONException object “net.sf.json.JSONException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role
问题原因是因为泛型User中有着HashSet级联的原因,所以需要忽略掉这个HashSet
JsonConfig config = new JsonConfig(); config.setExcludes(new String[] {"uploadSet","user_barrageSet"}); JSONArray userlist = JSONArray.fromObject(list, config);