如下代码:
- 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;
- }
- @Override
- public Object morph(Object dateStr) {
- // TODO Auto-generated method stub
- try {
- java.util.Date date = new SimpleDateFormat(format).parse(dateStr.toString());
- return new Timestamp(date.getTime());
- } catch (ParseException e) {
- // TODO Auto-generated catch block
- if (LOG.isInfoEnabled())
- LOG.info("日期格式可能无效,将采用系统当前日期");
- e.printStackTrace();
- }
- return new java.sql.Timestamp(System.currentTimeMillis());//返回默认日期
- }
- @Override
- public Class morphsTo() {
- // TODO Auto-generated method stub
- return 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;
- }
- @Override
- public Object morph(Object dateStr) {
- // TODO Auto-generated method stub
- try {
- java.util.Date date = new SimpleDateFormat(format).parse(dateStr.toString());
- return new Timestamp(date.getTime());
- } catch (ParseException e) {
- // TODO Auto-generated catch block
- if (LOG.isInfoEnabled())
- LOG.info("日期格式可能无效,将采用系统当前日期");
- e.printStackTrace();
- }
- return new java.sql.Timestamp(System.currentTimeMillis());//返回默认日期
- }
- @Override
- public Class morphsTo() {
- // TODO Auto-generated method stub
- return 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);//绑定请求参数到对象
- //处理特殊参数的绑定
- //处理客户性质ID
- String 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);
- <span style="color: #3366ff;">//处理提醒
- String remind = getParam("remind").toString();
- //反序列化JSON字符串到对象数组
- //List<Cremind> clist = JSONArray.toList(JSONArray.fromObject(remind),Cremind.class);
- List<Cremind> clist = JsonUtil.jsonArrayToList(remind, Cremind.class);</span>
- //设置客户提醒
- cst.setCreminds(new HashSet(clist));
- cstService.addCustomer(cst);
- return SUCCESS;
- }
- });
- }