1、后台接收json形式数据的处理

215 阅读5分钟

theme: java后端 highlight: 后台接收json数据(Hibernate)

1、后台数据接收

接收json类型的数据
public void doGet(HttpServletRequest request, HttpServletResponse response) {
   String returnMsg="";
   String provinceCode="";
   String oaDataSyncRequest = "";
   InputStreamReader in = null;
   BufferedReader bufferedReader = null;
   try {
      provinceCode = request.getHeader("provinceCode");
      request.setCharacterEncoding("UTF-8");
      in = new InputStreamReader((ServletInputStream) request.getInputStream(),"UTF-8");
      bufferedReader = new BufferedReader(in);
      StringBuffer stringBuffer = new StringBuffer("");
      String temp;
      while ((temp=bufferedReader.readLine())!=null) {
         stringBuffer.append(temp);
      }
      oaDataSyncRequest = stringBuffer.toString();
      try {
         OASyncResultData returnOASyncResultData =this.returnOASyncResultData(oaDataSyncRequest);
         returnMsg = JsonUtil.bean2json(returnOASyncResultData);
      } catch (Exception e) {
         returnMsg+=e.toString();
      }
      response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json");
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);
      response.getWriter().write(returnMsg);
      response.getWriter().flush();
       response.getWriter().close();
   } catch (IOException e) {
      e.printStackTrace();
   } finally {
      // 记录接口调用日志
      LogUtil.doAsynRecordLog("OADataSyncServlet", "oa_data_sync_data", oaDataSyncRequest, returnMsg, ConfigUtil.SERVER_ADDRESS, null, provinceCode);
      try {
         if(bufferedReader!=null) {
            bufferedReader.close();
         }
         if(in!=null) {
            in.close();
         }
      } catch (Exception e2) {
         e2.printStackTrace();
      }
   }
}
/**
 * 多线程处理记录日志任务
 * 
 */
public class AsynRecordLogThreadTask implements Runnable {

   private String className;
   private String functionName;
    private Object inputParameter;
    private Object outputParameter;
    private String level;
    private String account;
    private String provinceCode;

   public AsynRecordLogThreadTask(){
      
   }

   public AsynRecordLogThreadTask(String className, String functionName, Object inputParameter, Object outputParameter, String level, String account, String provinceCode) {
        this.className=className;
       this.inputParameter = inputParameter;
        this.outputParameter=outputParameter;
        this.functionName=functionName;
        this.level=level;
        this.account=account;
        this.provinceCode=provinceCode;
    }

   public void run() {
        try {
           String inputDataXml=null;
           if(inputParameter instanceof String){//如果是报文字符串,直接保存
              inputDataXml=inputParameter.toString();
           }else {
              inputDataXml = BeanToXmlParser.parseBeanToDataIsland(
                     inputParameter, "UTF-8");
         }
           String outDataXml =null;
           if(outputParameter instanceof String){//如果是报文字符串,直接保存
              outDataXml=outputParameter.toString();
           }else {
              outDataXml = BeanToXmlParser.parseBeanToDataIsland(
                   outputParameter, "UTF-8");
         }
         LogUtil.doLog(className, functionName,inputDataXml, outDataXml, level, account);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

   public String getClassName() {
      return className;
   }

   public void setClassName(String className) {
      this.className = className;
   }

   public String getFunctionName() {
      return functionName;
   }

   public void setFunctionName(String functionName) {
      this.functionName = functionName;
   }

   public Object getInputParameter() {
      return inputParameter;
   }

   public void setInputParameter(Object inputParameter) {
      this.inputParameter = inputParameter;
   }

   public Object getOutputParameter() {
      return outputParameter;
   }

   public void setOutputParameter(Object outputParameter) {
      this.outputParameter = outputParameter;
   }

   public String getLevel() {
      return level;
   }

   public void setLevel(String level) {
      this.level = level;
   }

   public String getAccount() {
      return account;
   }

   public void setAccount(String account) {
      this.account = account;
   }

}
/**
*日志
**/
@Component("logUtil")
@SuppressWarnings("unchecked")
public class LogUtil {

     //保存日志
    public static void addLog(Log log) {
        if (log != null) {
            log.setDateAdded(new Date());
            LogUtil.saveLog(log);
        }
    }

    /**
     * 日志处理
     * 
     * @param className
     *            类名称
     * @param function
     *            方法
     * @param inputParameter
     *            输入参数
     * @param outputParameter
     *            输出参数
     */
    public static void doLog(String className, String function, Object inputParameter,
            Object outputParameter,String level,String account) {
        try {
            String inputData = convertParamterToString(inputParameter).toString();
            String outputData = convertParamterToString(outputParameter).toString();

            Log log = new Log();
            log.setClassName(className);
            log.setFunction(function);
            log.setInputData( inputData);
            log.setLevel(level);
            log.setAccount(account);
            log.setOutputData( outputData);
            addLog(log);
        } catch (Exception e) {
            // System.out.println(e.getMessage());
        }
    }

    /**
     * 具体审批人列表日志
     * @param queryByExpressionLog
     */
    public static void doQueryByExpressLog(QueryByExpressionLog queryByExpressionLog){
        
           Connection connection = LogUtil.getConnection();
               try {
                   connection.setAutoCommit(false);
               } catch (SQLException e1) {
                   e1.printStackTrace();
               }
               PreparedStatement ps = null;

               String sql = "insert into QUERY_BY_EXPRESSION_LOG(id,user_,pwd,expr,piid,params ,output ,error_MSG,create_date  ,update_time) "
                          + " values(replace(cast(uuid_generate_v1() as text),'-',''),?,?,?,?,?,?,?,now(),now()) ";
               try {
                   ps = connection.prepareStatement(sql);
                   ps.setString(1, queryByExpressionLog.getUser());
                   ps.setString(2, queryByExpressionLog.getPwd());
                   ps.setString(3, queryByExpressionLog.getExpr());
                   ps.setString(4, queryByExpressionLog.getPiid());
                   ps.setString(5, queryByExpressionLog.getParams());
                   ps.setString(6, queryByExpressionLog.getOutput());
                   ps.setString(7, queryByExpressionLog.getErrorMsg());
                   ps.executeUpdate();
                   connection.commit();
               } catch (SQLException e1) {
                   e1.printStackTrace();
               }finally{
                  LogUtil.close(connection, ps);
               }
        
    }

    /**
     * 转换参数为字符串
     * 
     * @param obj
     * @return
     * @throws CertificateSysException
     */
    private static StringBuffer convertParamterToString(Object parameterObject) {
        StringBuffer paramterToString = new StringBuffer("");
        if (parameterObject == null)
            return paramterToString;
        if (parameterObject instanceof String || parameterObject instanceof Integer
                || parameterObject instanceof BigDecimal || parameterObject instanceof Double
                || parameterObject instanceof Float) {
            paramterToString.append(parameterObject).append(" ; ");
        }
        else if (parameterObject instanceof Object[]) {
            for (int i = 0; i < ((Object[]) parameterObject).length; i++) {
                paramterToString.append(convertParamterToString(((Object[]) parameterObject)[i]));
            }
        }
        else if (parameterObject instanceof Collection) {
            for (Object o : (Collection<?>) parameterObject) {
                paramterToString.append("Set Oject:" + convertParamterToString(o));
            }
        }
        else {
            Method[] declaredMethods = parameterObject.getClass().getDeclaredMethods();
            for (int j = 0; j < declaredMethods.length; j++) {
                Method method = declaredMethods[j];
                if (method.getName().indexOf("set") != 0
                        && method.getName().indexOf("getDeserializer") == -1
                        && method.getName().indexOf("equals") == -1
                        && method.getName().indexOf("getSerializer") == -1) {
                    try {
                        Object[] args = null;
                        Object value = method.invoke(parameterObject, args);
                        String fieldName = "";
                        if (method.getName().indexOf("get") == 0) {
                            fieldName = method.getName().substring(3);
                        }
                        else {
                            fieldName = method.getName().substring(2);
                        }
                        paramterToString.append(fieldName).append(" : ").append(
                                value == null ? "" : value).append(" ; ");
                    } catch (Exception e) {
                        // System.out.println(e.getMessage());
                    }
                }
            }
        }
        return paramterToString;
    }

    private static Connection getConnection() {
        Connection conn = null;
        try {
            DataSource dataSource = (DataSource) BeansUtil.getBean("dataSource");
            conn = dataSource.getConnection();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return conn;
    }

    private static void close(Connection conn, Statement stmt) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (Exception e) {
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (Exception e) {
            }
        }
    }

    /**
     * 保存日志
     * @param Log
     */
    private static void saveLog(Log log) {
        CommonDao commonDao = (CommonDao) BeansUtil.getBean("commonDao");
        String sql = "insert into log(ID,CLASS_NAME,FUNCTION,INPUT_DATA,OUTPUT_DATA,LEVELS,ACCOUNT,DATE_ADDED) "
                   + " values(replace(cast(uuid_generate_v1() as text),'-',''),:className,:function,:inputData,:outputData,:level,:account,now()) ";
        try {
           commonDao.createSQLQuery(sql)
              .setParameter("className", log.getClassName())
              .setParameter("function", log.getFunction())
              .setParameter("inputData", log.getInputData())
              .setParameter("outputData", log.getOutputData())
              .setParameter("level", log.getLevel())
              .setParameter("account", log.getAccount())
              .executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           
        }
    }

    /**
     * 异步记录日志
     * 
     * @param className
     * @param functionName
     * @param inputParameter
     * @param outputParameter
     * @param level
     * @param account
     */
    public static void doAsynRecordLog(String className, String functionName, Object inputParameter, Object outputParameter, String level, String account, String provinceCode){
       // 另起一个线程记日志
       AsynRecordLogThreadTask asynRecordLogThreadTask = new AsynRecordLogThreadTask(className, functionName, inputParameter, outputParameter, level, account, provinceCode);
      ThreadPoolExecutorUtil.cachedThreadPool.submit(asynRecordLogThreadTask);
    }

    private String toXML(Object inputParameter) {
        String inputData = "";
        XStream xstream = new XStream();
        if (inputParameter instanceof String) {
            inputData = (String) inputParameter;
        }
        else {
            if (inputParameter instanceof Object[]) {
                Object[] objects = (Object[]) inputParameter;
                for (Object obj : objects) {
                    if (obj instanceof String) {
                        inputData = inputData + obj.toString();
                    }
                    else {
                        inputData = inputData + xstream.toXML(obj);
                    }
                }
            }
            else if (inputParameter instanceof Collection) {
                Collection objects = (Collection) inputParameter;
                for (Object obj : objects) {
                    if (obj instanceof String) {
                        inputData = inputData + obj.toString();
                    }
                    else {
                        inputData = inputData + xstream.toXML(obj);
                    }
                }
            }
            else {
                inputData = xstream.toXML(inputParameter);
            }
        }
        return inputData;
    }
    private String toJSONObjectString(Object inputParameter) {
        String inputData = "";
        try {
            if (inputParameter instanceof Object[]) {
                inputData = JSONArray.fromObject(inputParameter).toString();
            }
            else if (inputParameter instanceof Collection) {
                Collection c = (Collection) inputParameter;
                if (c.size() > 0) {
                    Object[] a = new Object[c.size()];
                    c.toArray(a);
                    inputData = toJSONObjectString(a);
                }
            }
            else {
                inputData = JSONObject.fromObject(inputParameter).toString();
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return inputData;
    }
    
    
    /**
     * 保存日誌
     * 
     */
    private void saveLogItsm(LogItsm log) {

        Connection connection = this.getConnection();
        try {
            connection.setAutoCommit(false);
        } catch (SQLException e1) {
            e1.printStackTrace();
        }
        PreparedStatement ps = null;

        String sql = "insert into LOG_ITSM(ID,SYS_ID,INTERFACE_NAME,INTERFACE_REMARK,MESSAGE,INPUT_DATA,TYPE,PROVINCE_CODE,SEND,CREATE_DATE) " + " values(replace(cast(uuid_generate_v1() as text),'-',''),?,?,?,?,?,?,?,'0',now()) ";
        try {
            ps = connection.prepareStatement(sql);
            ps.setString(1, log.getSysId());
            ps.setString(2, log.getInterfaceName());
            ps.setString(3, log.getInterfaceRemark());
            ps.setString(4, log.getMessage());
            ps.setString(5, log.getInputData());
            ps.setString(6, log.getType());
            ps.setString(7, log.getProvinceCode());
            ps.executeUpdate();
            connection.commit();
        } catch (SQLException e1) {
            e1.printStackTrace();
        } finally {
            this.close(connection, ps);
        }
    }

}
2、json数据转成实体

public class JsonUtil {
   public static final String FORMAT_1 = "yyyy-MM-dd";
   public static final String FORMAT_2 = "yyyy/MM/dd";
   
    /**
     * @param obj
     *            任意对象
     * @return String
     */
    public static String object2json(Object obj) {
        StringBuilder json = new StringBuilder();
        if (obj == null) {
            json.append("""");
        }
        else if (obj instanceof String || obj instanceof Integer || obj instanceof Float
                || obj instanceof Boolean || obj instanceof Short || obj instanceof Double
                || obj instanceof Long || obj instanceof BigDecimal
                || obj instanceof BigInteger  || obj instanceof Byte) {
            json.append(""").append(string2json(obj.toString())).append(""");
        }
        else if (obj instanceof Date) {
            (new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(obj);
            json.append(""").append(string2json(obj.toString())).append(""");
        }

        else if (obj instanceof Object[]) {
            json.append(array2json((Object[]) obj));
        }
        else if (obj instanceof List) {
            json.append(list2json((List<?>) obj));
        }
        else if (obj instanceof Map) {
            json.append(map2json((Map<?, ?>) obj));
        }
        else if (obj instanceof Set) {
            json.append(set2json((Set<?>) obj));
        }
        else {
            json.append(bean2json(obj));
        }

        return json.toString();
    }

    /**
     * @param bean
     *            bean对象
     * @return String
     */
    public static String bean2json(Object bean) {
        StringBuilder json = new StringBuilder();
        json.append("{");
        PropertyDescriptor[] props = null;
        try {
            props = Introspector.getBeanInfo(bean.getClass(), Object.class)
                    .getPropertyDescriptors();
        } catch (IntrospectionException e) {
        }
        if (props != null) {
            for (int i = 0; i < props.length; i++) {
                try {
                    String name = object2json(props[i].getName());
                    String value = object2json(props[i].getReadMethod().invoke(bean));
                    json.append(name);
                    json.append(":");
                    json.append(value);
                    json.append(",");
                } catch (Exception e) {
                }
            }
            json.setCharAt(json.length() - 1, '}');
        }
        else {
            json.append("}");
        }
        return json.toString();
    }

    /**
     * @param list
     *            list对象
     * @return String
     */
    public static String list2json(List<?> list) {
        StringBuilder json = new StringBuilder();
        json.append("{ "results": " + list.size() + ", "rows": ");
        json.append("[");
        if (list != null && list.size() > 0) {
            for (Object obj : list) {
                json.append(object2json(obj));
                json.append(",");
            }
            json.setCharAt(json.length() - 1, ']');
        }
        else {
            json.append("]");
        }
        json.append("}");
        return json.toString();
    }

    /**
     * @param array
     *            对象数组
     * @return String
     */
    public static String array2json(Object[] array) {
        StringBuilder json = new StringBuilder();
        json.append("[");
        if (array != null && array.length > 0) {
            for (Object obj : array) {
                json.append(object2json(obj));
                json.append(",");
            }
            json.setCharAt(json.length() - 1, ']');
        }
        else {
            json.append("]");
        }
        return json.toString();
    }

    /**
     * @param map
     *            map对象
     * @return String
     */
    public static String map2json(Map<?, ?> map) {
        StringBuilder json = new StringBuilder();
        json.append("{");
        if (map != null && map.size() > 0) {
            for (Object key : map.keySet()) {
                json.append(object2json(key));
                json.append(":");
                json.append(object2json(map.get(key)));
                json.append(",");
            }
            json.setCharAt(json.length() - 1, '}');
        }
        else {
            json.append("}");
        }
        return json.toString();
    }

    /**
     * @param set
     *            集合对象
     * @return String
     */
    public static String set2json(Set<?> set) {
        StringBuilder json = new StringBuilder();
        json.append("[");
        if (set != null && set.size() > 0) {
            for (Object obj : set) {
                json.append(object2json(obj));
                json.append(",");
            }
            json.setCharAt(json.length() - 1, ']');
        }
        else {
            json.append("]");
        }
        return json.toString();
    }

    /**
     * @param s
     *            参数
     * @return String
     */
    public static String string2json(String s) {
        if (s == null)
            return "";
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            switch (ch) {
            case '"':
                sb.append("\"");
                break;
            case '\':
                sb.append("\\");
                break;
            case '\b':
                sb.append("\b");
                break;
            case '\f':
                sb.append("\f");
                break;
            case '\n':
                sb.append("\n");
                break;
            case '\r':
                sb.append("\r");
                break;
            case '\t':
                sb.append("\t");
                break;
            case '/':
                sb.append("\/");
                break;
            default:
                if (ch >= '\u0000' && ch <= '\u001F') {
                    String ss = Integer.toHexString(ch);
                    sb.append("\u");
                    for (int k = 0; k < 4 - ss.length(); k++) {
                        sb.append('0');
                    }
                    sb.append(ss.toUpperCase());
                }
                else {
                    sb.append(ch);
                }
            }
        }
        return sb.toString();
    }

    /**
     * @param obj
     *            要转化的对象
     * @param map<"0","fieldName1"> map<"1","fieldName2">
     *            需要转化的字段 如果为空,则是全部的字段
     * @return
     * @throws Exception
     */
    public static String beanToJson(Object obj, Map<String, String> map) throws Exception {
        JSONArray jsonArray = new JSONArray();
        JSONObject bean = new JSONObject();
        
        Class<?> clazz = obj.getClass();   
        Method[] methods = clazz.getMethods();
        Field fields[] = clazz.getDeclaredFields();
        
        for(Field field:fields){ 
            if(map==null){
                String fieldName = field.getName();
                String getMetName = ReflectUtil.pareGetName(field.getName()); 
                if(!ReflectUtil.checkMethod(methods,getMetName)){  
                    continue;  
                } 
                Class<?>[] parameterTypes =null;
                Method method = clazz.getMethod(getMetName, parameterTypes);  
                Object object = method.invoke(obj, new Object[]{});
                if(object == null){
                    object = new String("");
                }
                bean.element(fieldName,object);                
            }else {
                String fieldName = field.getName();
                if (map.containsValue(fieldName)) {
                    String getMetName = ReflectUtil.pareGetName(field.getName()); 
                    if(!ReflectUtil.checkMethod(methods,getMetName)){  
                        continue;  
                    } 
                    Class<?>[] parameterTypes =null;
                    Method method = clazz.getMethod(getMetName, parameterTypes);  
                    Object object = method.invoke(obj, new Object[]{});
                    if(object == null){
                        object = new String("");
                    }
                    bean.element(fieldName,object);
                }            
            }
        }   
        jsonArray.add(map);
        jsonArray.add(bean);
        return jsonArray.toString();
    }
    
    /**
     * 将字符串转成对象
     * 
     * @param json json字符串
     * @param cla 转换成BEAN对应的CLASS
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T json2Bean(String json, Class<T> cla) {
        JSONObject jsonObject = JSONObject.fromObject(json);
        return (T) JSONObject.toBean(jsonObject, cla);
    }
    
    /**
     * 将字符串转成对象list
     * 
     * @param <E>
     * @param jsonStr
     * @param cla
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <E> List<E> json2List(String jsonStr, Class<E> cla) {
        List<E> itemList = new ArrayList<E>();
        JSONArray jsonarray = JSONArray.fromObject(jsonStr);
        for (int i = 0; i < jsonarray.size(); i++) {
           
            JSONObject object = jsonarray.getJSONObject(i);
            //注册时间类型
            String[] formats = new String[] {"yyyy-MM-dd HH:mm:ss","yyyy/MM/dd HH:mm:ss","yyyy-MM-dd","yyyy/MM/dd"}; 
          JSONUtils.getMorpherRegistry().registerMorpher(new TimestampMorpher(formats));
            JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(formats)); 
          
            E item = (E)JSONObject.toBean(object, cla);
            itemList.add(item);
        }
        
        return itemList;
    }
    
    @SuppressWarnings("unchecked")
    public static <E> List<E> json2List(String jsonStr, Class<E> cla,List<ColumnData> columnDatas,List<String>  failsList) {
        List<E> itemList = new ArrayList<E>();
        JSONArray jsonarray = JSONArray.fromObject(jsonStr);
        for (int i = 0; i < jsonarray.size(); i++) {
           
            JSONObject object = jsonarray.getJSONObject(i);
            //注册时间类型
            String[] formats = new String[] {"yyyy-MM-dd HH:mm:ss","yyyy/MM/dd HH:mm:ss","yyyy-MM-dd","yyyy/MM/dd"}; 
          JSONUtils.getMorpherRegistry().registerMorpher(new TimestampMorpher(formats));
            JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(formats)); 
          
            E item = (E)JSONObject.toBean(object, cla);
            checkJson2ListFailProperty(object,item,columnDatas,failsList);
            itemList.add(item);
        }
        
        return itemList;
    }
    
    /**
     * 校验JSONObject与E中均存在的属性,并且当JSONObject有值但E中没转化成对应的值,记录在错误列表failsList中
     *     e.g.     日期  “2018-02-30” 转化成对应的DATE值时为空的情况 
     * @param object json对象
     * @param entry  实体对象
     * @param columnDatas导入对应的字段说明信息
     * @param failsList 转化失败提示信息
     * @throws IllegalAccessException 
     * @throws IllegalArgumentException 
     */
    public static <E>  void checkJson2ListFailProperty(JSONObject object,  E   entry,List<ColumnData> columnDatas,List<String>  failsList){
        
       Field[] fieldArray =   entry.getClass().getDeclaredFields();
       for(int i=0;i<fieldArray.length;i++) {
          //首先判断E中是否存在该属性
          fieldArray[i].setAccessible(true);
          String propertyName = fieldArray[i].getName();
          if(object.containsKey(propertyName)){
             ColumnData  columnData = findColumnDataByName(columnDatas,propertyName); 
             try{
                if(!StringHelper.isEmpty(object.get(propertyName)) && fieldArray[i].get(entry)==null ){
                   System.out.println("1:"+propertyName+"---"+object.get(propertyName).toString()+"---");
                   String hint =columnData==null?"值:"+object.get(propertyName)+"无效,无法转化;":columnData.getColumnTitle()+"值:"+object.get(propertyName)+"无效,无法转化;";
                   failsList.add(hint);
                }
             }catch(Exception e){
                e.printStackTrace();
                failsList.add(e.getMessage());
             }
          }
       }
        
            
    }
    
    /**
     * 根据字段名称找对应的导入列结构信息
     * @param columnDatas
     * @param fieldName
     * @return
     */
    public static ColumnData findColumnDataByName(List<ColumnData> columnDatas,String fieldName){
       ColumnData result=null;
       for(ColumnData columnData:columnDatas){
          //如果找到对应的字段
          if(columnData.getColumnValue().equals(fieldName)){
             result=columnData;
             break;
          }
       }
       return result;
    }
    
    public static JSONArray toJsonArr(Object obj){
        JsonConfig jsonConfig=new JsonConfig();
        jsonConfig.registerJsonValueProcessor(ArrayList.class,new JsonDefaultValueProcessor());
        
        return JSONArray.fromObject(obj, jsonConfig);
    }
    //对于反向应用的实体,则需要传入class,假如需要显示那些属性,可以配置在propertys
    public static JSONArray toJsonArr(Object obj,Class clz,String[] propertys){
       
        JsonConfig jsonConfig=new JsonConfig();
        jsonConfig.registerJsonValueProcessor(ArrayList.class,new JsonDefaultValueProcessor());
        jsonConfig.registerJsonValueProcessor(clz, 
                  new ObjectJsonValueProcessor(propertys,clz));
        
        return JSONArray.fromObject(obj, jsonConfig);
    }
    
    public static JSONObject toJsonObject(Object obj){
       
       JsonConfig jsonConfig = new JsonConfig();
       //@1:注册时间类型为自定义类型JsonDateValueProcessor
      JsonValueProcessor dateValueProcessor = new JsonDefaultValueProcessor();
      
      jsonConfig.registerJsonValueProcessor(java.util.Date.class, dateValueProcessor);
      jsonConfig.registerJsonValueProcessor(java.sql.Timestamp.class, dateValueProcessor);
      
        return JSONObject.fromObject(obj, jsonConfig);
    }

   public static Map<String, Object> parseJSON2Map(String jsonStr) {
      Map<String, Object> map = new HashMap<String, Object>();
      // 最外层解析
      JSONObject json = JSONObject.fromObject(jsonStr);
      for (Object k : json.keySet()) {
         Object v = json.get(k);
         // 如果内层还是数组的话,继续解析
         if (v instanceof JSONArray) {
            List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
            Iterator<JSONObject> it = ((JSONArray) v).iterator();
            while (it.hasNext()) {
               JSONObject json2 = it.next();
               list.add(parseJSON2Map(json2.toString()));
            }
            map.put(k.toString(), list);
         } else {
            map.put(k.toString(), v);
         }
      }
      return map;
      
   }
   /**
    * JSON转List集合
    * 
    * @param jsonStr
    * @return
    */
   public static List<Map<String, Object>> parseJSON2List(String jsonStr) {
      JSONArray jsonArr = JSONArray.fromObject(jsonStr);
      List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
      Iterator<JSONObject> it = jsonArr.iterator();
      while (it.hasNext()) {
         JSONObject json2 = it.next();
         list.add(parseJSON2Map(json2.toString()));
      }
      return list;
   }
   
}