项目用到的Json字串到Json对象转换

来源:互联网 发布:百战天虫豪华版java 编辑:程序博客网 时间:2024/04/28 05:56

如下代码:

StringBuilder sb = new StringBuilder("[");sb.append("{");sb.append("cremindTitle:\"小名\",");sb.append("cremindDate:\"2012-06-05 19:20:22\",");sb.append("cremindRemark:\"阿斯蒂芬\"");sb.append("}");sb.append("]");List<Cremind> clist = JSONArray.toList(JSONArray.fromObject(sb.toString()),Cremind.class);

在执行中会报错,原因是由于日期类型字串到日期类型Timestamp的转换,解决思路如下:

编写一个Morpher类继承自AbstractObjectMorpher

class TimeStampMorpher extends AbstractObjectMorpher{private Logger LOG = Logger.getLogger(TimeStampMorpher.class);private String format ="yyyy-MM-dd hh:mm:ss";public void setFormat(String format) {this.format = format;}public TimeStampMorpher() {// TODO Auto-generated constructor stub}public TimeStampMorpher(String format) {this.format = format;}@Overridepublic Object morph(Object dateStr) {// TODO Auto-generated method stubtry {java.util.Date date = new SimpleDateFormat(format).parse(dateStr.toString());return new Timestamp(date.getTime());} catch (ParseException e) {// TODO Auto-generated catch blockif (LOG.isInfoEnabled())LOG.info("日期格式可能无效,将采用系统当前日期");e.printStackTrace();}return new  java.sql.Timestamp(System.currentTimeMillis());//返回默认日期}@Overridepublic Class morphsTo() {// TODO Auto-generated method stubreturn Timestamp.class;}}

最终处理版本:

package com.defshare.foundation.global;import java.sql.Timestamp;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.List;import org.apache.log4j.Logger;import net.sf.ezmorph.object.AbstractObjectMorpher;import net.sf.json.JSONArray;import net.sf.json.util.JSONUtils;class TimeStampMorpher extends AbstractObjectMorpher{private Logger LOG = Logger.getLogger(TimeStampMorpher.class);private String format ="yyyy-MM-dd hh:mm:ss";public void setFormat(String format) {this.format = format;}public TimeStampMorpher() {// TODO Auto-generated constructor stub}public TimeStampMorpher(String format) {this.format = format;}@Overridepublic Object morph(Object dateStr) {// TODO Auto-generated method stubtry {java.util.Date date = new SimpleDateFormat(format).parse(dateStr.toString());return new Timestamp(date.getTime());} catch (ParseException e) {// TODO Auto-generated catch blockif (LOG.isInfoEnabled())LOG.info("日期格式可能无效,将采用系统当前日期");e.printStackTrace();}return new  java.sql.Timestamp(System.currentTimeMillis());//返回默认日期}@Overridepublic Class morphsTo() {// TODO Auto-generated method stubreturn Timestamp.class;}}public final class JsonUtil {/** * json数组字串到json数组对象<br/> * <pre> *  StringBuilder sb = new StringBuilder("["); *sb.append("{"); *sb.append("cremindTitle:\"xiaoqiang\","); *sb.append("cremindDate:\"2012-06-0519:20:22\","); *sb.append("cremindRemark:\"xiaoqiangremark\""); *sb.append("}"); *sb.append("]"); * </pre> * @param jsonArray * @param classzz */public static final <T>  List<T>  jsonArrayToList(String jsonArray,Class classzz){JSONUtils.getMorpherRegistry().registerMorpher(new TimeStampMorpher());//JSONUtils.getMorpherRegistry().registerMorpher(new TimeStampMorpher());   //StringBuilder sb = new StringBuilder("[");//sb.append("{");//sb.append("cremindTitle:\"小名\",");//sb.append("cremindDate:\"2012-06-0519:20:22\",");//sb.append("cremindRemark:\"阿斯蒂芬\"");//sb.append("}");//sb.append("]");//List<Cremind> clist = JSONArray.toList(JSONArray.fromObject(sb.toString()),//Cremind.class);return JSONArray.toList(JSONArray.fromObject(jsonArray),classzz);}}

项目中表示层Action调用:

/** * 新增客户 * 请求参数: * name:客户名称 *cno:客户编号(跟ID不同) *customKindId:客户性质ID *phone:公司电话 *fax:公司传真 *address:客户地址 *siteUrl:公司网址 *cIndustryId:客户行业ID *cIndustryNum:行业排名 *mainSellProduct:主营产品 *cbuildDate:成立时间 *clevelId:客户级别ID *signTag:签约标志 *remind:[{ *cremindTitle:提醒名称 *cremindDate:提醒日期 *cremindRemark:备注 *},{},{}] * @return * @throws Exception */public String addCustomer() throws Exception{return super.executeAction(new IExecuteActionCallback() {public String execute(BaseJSONAction baseJsonAction) {Customer cst = new Customer();bindParam2Bean(cst);//绑定请求参数到对象//处理特殊参数的绑定//处理客户性质IDString customKindId = getParam("customKindId").toString();if (!StringUtils.isBlank(customKindId)){CustomKind ck = new CustomKind();ck.setCustomKindId(Integer.valueOf(customKindId));cst.setCustomKind(ck);}//处理客户行业String cIndustryId = getParam("cIndustryId").toString();if(!StringUtils.isBlank(cIndustryId)){Cindustry cs = new Cindustry();cs.setCindustryId(Integer.valueOf(cIndustryId));cst.setCindustry(cs);}//处理客户级别String clevelId = getParam("clevelId").toString();if(!StringUtils.isBlank(clevelId)){Clevel cl = new Clevel();cl.setClevelId(Integer.valueOf(clevelId));cst.setClevel(cl);}//處理註冊時間cst.setCregArchDate(DateUtil.getTimestamp());if (cst.getCbuildDate()==null)cst.setCbuildDate(DateUtil.getTimestamp());//處理所屬員工Emp emp = getCurrentUser();if (emp!=null)cst.setEmp(emp);//处理提醒String remind = getParam("remind").toString();//反序列化JSON字符串到对象数组//List<Cremind> clist = JSONArray.toList(JSONArray.fromObject(remind),Cremind.class);List<Cremind> clist = JsonUtil.jsonArrayToList(remind, Cremind.class);//设置客户提醒cst.setCreminds(new HashSet(clist));cstService.addCustomer(cst);return SUCCESS;}});}


原创粉丝点击