今天在用extjs4.2做一个东西的增加时,碰到选择的时间在后台action中怎么都不能转换到对象里面,转换的时间都是当前时间,代码如下:
json为
{"deviceNum":"1",'operTypeBean':{"operType":2},'operator':'sa',"operTime":"01 21 2015","operContent":"\u9e45\u9e45\u9e45\u997f\u9e45\u9e45\u9e45\u997f\u9e45\u9e45\u9e45\u997f\u9e45\u9e45\u9e45\u997f\u9e45\u9e45\u9e45"};
bean类为
public class DeviceLogBean {
private int ID;
private String deviceNum;
private OperTypeBean operTypeBean;
private Date operTime;
private String operator;
private String operContent;
aciton为做的转换为
public static Object getBeanByJson (Class<?> clazz,String jsonData) throws Exception{
JSONObject obj = JSONObject.fromObject(jsonData);
Object o= JSONObject.toBean(obj, clazz);
return o;
}
public static void main(String args[])
{
String json="{'deviceNum':'1','operTypeBean':{'operType':2},'operator':'sa','operTime':'2015年1月21 日','operContent':'\u9e45\u9e45\u9e45\u997f\u9e45\u9e45\u9e45\u997f\u9e45\u9e45\u9e45\u997f\u9e45\u9e45\u9e45\u997f\u9e45\u9e45\u9e45'}";
DeviceLogBean bean;
try {
bean=(DeviceLogBean)PageViewHelper.getBeanByJson(DeviceLogBean.class, json);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这样转换时怎么都不行,bean里面的时间都是当前时间,最后发现给转换的方法做些修改就可以了
在aciton的方法中加二句话如下,红色显示的
public static Object getBeanByJson (Class<?> clazz,String jsonData) throws Exception{
JSONObject obj = JSONObject.fromObject(jsonData);
String[] dateFormats = new String[] {"yyyy年MM月-dd日"};
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
Object o= JSONObject.toBean(obj, clazz);
return o;
}
转换就正常了,在这需要注意,String[] dateFormats = new String[] {"yyyy年MM月-dd日"}; 里面的时间格式要和json串里面的要对应起来,如果不一样出的问题还是一样