写这边文章的初衷就是遇到了json在转换日期格式出现了异常 net.sf.json.JSONException: java.lang.reflect.InvocationTargetException 原因是当你用Map接收数据库返回了java.sql.Date 日期的数据进行json转换出的问题话不多说 直接上代码
经过测试,以下json对日期的格式化转换支持java.util.Date,java.sql.Date
转化方法
@Override public String toString(){ JsonConfig entryConfig = new JsonConfig(); // 将java.util.Date()的日期格式转换并且设置转换的格式(实体对象) entryConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor()); // 创建一个objConfig 用来将对象转换成json JsonConfig objConfig = new JsonConfig(); // 将java.sql.Date()的日期格式转换成并且设置转换的格式(数据库返回的map对象) objConfig.registerJsonValueProcessor(java.sql.Date.class, new JsonDateValueProcessor()); //获取对象类的名字(如果 com.deyi.entry.User) String typeName = getGenericTypeName(rows); JSONObject jsonObject = new JSONObject(); if(null == typeName || "".equals(typeName)){ return ""; } //判断对象是否是集合 if(rows instanceof java.util.List){ //如果对象是集合 并且包的名字是util 的就用 objConfig 否则用entryConfig if("java.util".equals(typeName)) jsonObject.put("rows", JSONArray.fromObject(rows,objConfig)); else jsonObject.put("rows", JSONArray.fromObject(rows,entryConfig)); }else{ if("java.util".equals(typeName)) jsonObject.put("rows", JSONObject.fromObject(rows,objConfig)); else jsonObject.put("rows", JSONObject.fromObject(rows,entryConfig)); } jsonObject.put("total", total); jsonObject.put("statusCode", statusCode); jsonObject.put("message", message); return jsonObject.toString(); } /** *获取对象的泛型的包名 如List<String> java.lang.String * */ public String getGenericTypeName(Object obj){ String typeName = null; if(obj instanceof java.util.List){ List<?> list = (List<?>)obj; if(list.size() > 0){ Class<?> c = list.get(0).getClass(); String str = c.getName(); return getStrTopPoint(str); } }else{ if(null != obj){ Class<?> c = obj.getClass(); String str = c.getName(); return getStrTopPoint(str); } } return typeName; } /** *获取包名的内容 如 java.util * */ public String getStrTopPoint(String str){ String typeName = str.substring(0,str.indexOf("."))+"."+ str.substring(str.indexOf(".")+1,str.length()). substring(0,str.substring(str.indexOf(".")+1,str.length()).indexOf(".")); return typeName; }
格式化类
import java.text.SimpleDateFormat; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; public class JsonDateValueProcessor implements JsonValueProcessor { // 定义转换日期类型的输出格式 private String format = "yyyy-MM-dd"; @Override public Object processArrayValue(Object arg0, JsonConfig arg1) { return process(arg0); } private Object process(Object arg0) { SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(arg0); } @Override public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) { return process(arg1); } }