`

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

阅读更多

如下代码:

 

Java代码 
  1. StringBuilder sb = new StringBuilder("[");  
  2. sb.append("{");  
  3. sb.append("cremindTitle:\"小名\",");  
  4. sb.append("cremindDate:\"2012-06-05 19:20:22\",");  
  5. sb.append("cremindRemark:\"阿斯蒂芬\"");  
  6. sb.append("}");  
  7. sb.append("]");  
  8. List<Cremind> clist = JSONArray.toList(JSONArray.fromObject(sb.toString()),  
  9.         Cremind.class);  

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

 

编写一个Morpher类继承自AbstractObjectMorpher

 

Java代码 
  1. class TimeStampMorpher extends AbstractObjectMorpher{  
  2.       
  3.     private Logger LOG = Logger.getLogger(TimeStampMorpher.class);  
  4.       
  5.     private String format ="yyyy-MM-dd hh:mm:ss";  
  6.     public void setFormat(String format) {  
  7.         this.format = format;  
  8.     }  
  9.       
  10.     public TimeStampMorpher() {  
  11.         // TODO Auto-generated constructor stub  
  12.     }  
  13.       
  14.     public TimeStampMorpher(String format) {  
  15.         this.format = format;  
  16.     }  
  17.   
  18.     @Override  
  19.     public Object morph(Object dateStr) {  
  20.         // TODO Auto-generated method stub  
  21.           
  22.         try {         
  23.             java.util.Date date = new SimpleDateFormat(format).parse(dateStr.toString());  
  24.             return new Timestamp(date.getTime());  
  25.         } catch (ParseException e) {  
  26.             // TODO Auto-generated catch block  
  27.             if (LOG.isInfoEnabled())  
  28.                 LOG.info("日期格式可能无效,将采用系统当前日期");  
  29.             e.printStackTrace();  
  30.         }  
  31.         return new  java.sql.Timestamp(System.currentTimeMillis());//返回默认日期       
  32.     }  
  33.   
  34.     @Override  
  35.     public Class morphsTo() {  
  36.         // TODO Auto-generated method stub  
  37.         return Timestamp.class;  
  38.     }  
  39. }  

最终处理版本:

 

 

Java代码 
  1. package com.defshare.foundation.global;  
  2.   
  3. import java.sql.Timestamp;  
  4. import java.text.ParseException;  
  5. import java.text.SimpleDateFormat;  
  6. import java.util.List;  
  7.   
  8. import org.apache.log4j.Logger;  
  9.   
  10. import net.sf.ezmorph.object.AbstractObjectMorpher;  
  11. import net.sf.json.JSONArray;  
  12. import net.sf.json.util.JSONUtils;  
  13.   
  14. class TimeStampMorpher extends AbstractObjectMorpher{  
  15.       
  16.     private Logger LOG = Logger.getLogger(TimeStampMorpher.class);  
  17.       
  18.     private String format ="yyyy-MM-dd hh:mm:ss";  
  19.     public void setFormat(String format) {  
  20.         this.format = format;  
  21.     }  
  22.       
  23.     public TimeStampMorpher() {  
  24.         // TODO Auto-generated constructor stub  
  25.     }  
  26.       
  27.     public TimeStampMorpher(String format) {  
  28.         this.format = format;  
  29.     }  
  30.   
  31.     @Override  
  32.     public Object morph(Object dateStr) {  
  33.         // TODO Auto-generated method stub  
  34.           
  35.         try {         
  36.             java.util.Date date = new SimpleDateFormat(format).parse(dateStr.toString());  
  37.             return new Timestamp(date.getTime());  
  38.         } catch (ParseException e) {  
  39.             // TODO Auto-generated catch block  
  40.             if (LOG.isInfoEnabled())  
  41.                 LOG.info("日期格式可能无效,将采用系统当前日期");  
  42.             e.printStackTrace();  
  43.         }  
  44.         return new  java.sql.Timestamp(System.currentTimeMillis());//返回默认日期       
  45.     }  
  46.   
  47.     @Override  
  48.     public Class morphsTo() {  
  49.         // TODO Auto-generated method stub  
  50.         return Timestamp.class;  
  51.     }  
  52. }  
  53.   
  54. public final class JsonUtil {  
  55.       
  56.     /** 
  57.      * json数组字串到json数组对象<br/> 
  58.      * <pre> 
  59.      *  StringBuilder sb = new StringBuilder("["); 
  60.      *  sb.append("{"); 
  61.      *  sb.append("cremindTitle:\"xiaoqiang\","); 
  62.      *  sb.append("cremindDate:\"2012-06-0519:20:22\","); 
  63.      *  sb.append("cremindRemark:\"xiaoqiangremark\""); 
  64.      *  sb.append("}"); 
  65.      *  sb.append("]"); 
  66.      * </pre> 
  67.      * @param jsonArray 
  68.      * @param classzz 
  69.      */  
  70.     public static final <T>  List<T>  jsonArrayToList(String jsonArray,Class classzz){  
  71.         JSONUtils.getMorpherRegistry().registerMorpher(new TimeStampMorpher());  
  72. //      JSONUtils.getMorpherRegistry().registerMorpher(new TimeStampMorpher());          
  73. //      StringBuilder sb = new StringBuilder("[");  
  74. //      sb.append("{");  
  75. //      sb.append("cremindTitle:\"小名\",");  
  76. //      sb.append("cremindDate:\"2012-06-0519:20:22\",");  
  77. //      sb.append("cremindRemark:\"阿斯蒂芬\"");  
  78. //      sb.append("}");  
  79. //      sb.append("]");  
  80. //      List<Cremind> clist = JSONArray.toList(JSONArray.fromObject(sb.toString()),  
  81. //              Cremind.class);  
  82.           
  83.         return JSONArray.toList(JSONArray.fromObject(jsonArray),classzz);  
  84.     }  
  85.   
  86. }  

项目中表示层Action调用:

 

 

Java代码 
  1. /** 
  2.      * 新增客户 
  3.      * 请求参数: 
  4.      * name:客户名称 
  5.      *  cno:客户编号(跟ID不同) 
  6.      *  customKindId:客户性质ID 
  7.      *  phone:公司电话 
  8.      *  fax:公司传真 
  9.      *  address:客户地址 
  10.      *  siteUrl:公司网址 
  11.      *  cIndustryId:客户行业ID 
  12.      *  cIndustryNum:行业排名 
  13.      *  mainSellProduct:主营产品 
  14.      *  cbuildDate:成立时间 
  15.      *  clevelId:客户级别ID 
  16.      *  signTag:签约标志 
  17.      *  remind:[{ 
  18.      *  cremindTitle:提醒名称 
  19.      *  cremindDate:提醒日期 
  20.      *  cremindRemark:备注 
  21.      *  },{},{}] 
  22.      * @return 
  23.      * @throws Exception 
  24.      */  
  25.     public String addCustomer() throws Exception{  
  26.         return super.executeAction(new IExecuteActionCallback() {  
  27.               
  28.             public String execute(BaseJSONAction baseJsonAction) {  
  29.                 Customer cst = new Customer();  
  30.                 bindParam2Bean(cst);//绑定请求参数到对象  
  31.                 //处理特殊参数的绑定  
  32.                 //处理客户性质ID  
  33.                 String customKindId = getParam("customKindId").toString();  
  34.                 if (!StringUtils.isBlank(customKindId)){  
  35.                     CustomKind ck = new CustomKind();  
  36.                     ck.setCustomKindId(Integer.valueOf(customKindId));  
  37.                     cst.setCustomKind(ck);                    
  38.                 }  
  39.                   
  40.                 //处理客户行业  
  41.                 String cIndustryId = getParam("cIndustryId").toString();  
  42.                 if(!StringUtils.isBlank(cIndustryId)){  
  43.                     Cindustry cs = new Cindustry();  
  44.                     cs.setCindustryId(Integer.valueOf(cIndustryId));  
  45.                     cst.setCindustry(cs);  
  46.                 }  
  47.                 //处理客户级别  
  48.                 String clevelId = getParam("clevelId").toString();  
  49.                 if(!StringUtils.isBlank(clevelId)){  
  50.                     Clevel cl = new Clevel();  
  51.                     cl.setClevelId(Integer.valueOf(clevelId));  
  52.                     cst.setClevel(cl);  
  53.                 }  
  54.                   
  55.                 //處理註冊時間  
  56.                 cst.setCregArchDate(DateUtil.getTimestamp());  
  57.                 if (cst.getCbuildDate()==null)  
  58.                     cst.setCbuildDate(DateUtil.getTimestamp());  
  59.                   
  60.                 //處理所屬員工  
  61.                 Emp emp = getCurrentUser();  
  62.                 if (emp!=null)  
  63.                     cst.setEmp(emp);  
  64.                                   
  65.                   
  66.                 <span style="color: #3366ff;">//处理提醒  
  67.                 String remind = getParam("remind").toString();  
  68.                 //反序列化JSON字符串到对象数组  
  69.                 //List<Cremind> clist = JSONArray.toList(JSONArray.fromObject(remind),Cremind.class);  
  70.                 List<Cremind> clist = JsonUtil.jsonArrayToList(remind, Cremind.class);</span>  
  71.                 //设置客户提醒  
  72.                 cst.setCreminds(new HashSet(clist));  
  73.                   
  74.                 cstService.addCustomer(cst);                  
  75.                   
  76.                 return SUCCESS;  
  77.             }  
  78.         });  
  79.     }  

 

2
5
分享到:
评论
1 楼 nj_first 2012-07-05  
何不使用jackson这个字符串转对象的工具包,很方便的

相关推荐

Global site tag (gtag.js) - Google Analytics