我们在使用json的包返回数据的时候,如果返回的对象包含Date日期对象的时候,后台老报错误,老是不能转换,那么我们就需要自定义日期对象的显示格式了,其实也很简单总体思路是:
1.自己实现下JsonValueProcessor接口,写上自己的实现逻辑。代码如下:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/**
*
* @类功能说明:支持java.sql.Date显示
* @类修改者:
* @修改日期:
* @修改说明:
* @作者:流浪鱼
* @创建时间:2013-7-17 上午11:24:11
* @版本:V1.0
*/
public class DateJsonValueProcessor implements JsonValueProcessor{
public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
private DateFormat dateFormat;
/**
* 构造方法.
*
* @param datePattern 日期格式
*/
public DateJsonValueProcessor(String datePattern) {
try {
dateFormat = new SimpleDateFormat(datePattern);
} catch (Exception ex) {
dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
}
}
@Override
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return process(value);
}
@Override
public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
return process(value);
}
private Object process(Object value) {
if (value == null) {
value = new Date();
}
return dateFormat.format((Date) value);
}
}
2.使用json转换时使用JsonConfig中进行注册,并在使用的时候自定自定义的config
JsonConfig config = new JsonConfig();
DateJsonValueProcessor dateProcessor = new DateJsonValueProcessor("yyyy-MM-dd");
config.registerJsonValueProcessor(java.sql.Date.class, dateProcessor);
JSONArray array=JSONArray.fromObject(list,config);
Struts2Utils.getResponse().setContentType("text/html;charset=gbk");
Struts2Utils.getResponse().getWriter().write(array.toString());
这样可以支持了