一直使用 json-lib-2.4-jdk15,感觉还不错, 通过 jsonConfig可以灵活性的设置参数
(吐槽下,这个jar 很久没有更新了)
今天使用的时候,报了个异常 java.lang.ClassCastException: JSON keys must be strings
代码片段如下
LinkedHashMap<Integer, String> iteratorIndexMap = new LinkedHashMap<Integer, String>(); for (int i = startIteratorIndex; i <= endIteratorIndex; ++i){ iteratorIndexMap.put(i, map.get(i)); } pagerVMParam.setIteratorIndexMap(iteratorIndexMap); Map<String, Object> vmParamMap = new HashMap<String, Object>(); vmParamMap.put("pagerVMParam", pagerVMParam); if (log.isDebugEnabled()){ log.debug("vmParamMap:{}", JsonUtil.format(vmParamMap)); log.debug("debugIsNotParseVM:{}", debugIsNotParseVM); }
因为我使用了 LinkedHashMap<Integer, String>, key是 integer类型的
网上已经有人给过解决方案:
http://hi.baidu.com/wsndbhs/item/1267fca7be8e989a151073b6
他的建议是 :
修改Map的key为String.
或者换jar包,换成低版本的!
我觉得不是最好的解决方案, 看了下这段源码:
if( !(k instanceof String) && !jsonConfig.isAllowNonStringKeys() ) { throw new ClassCastException("JSON keys must be strings."); }
可以通过 设置 setAllowNonStringKeys 来解决问题 ,下面是我封装的通用代码,来格式化输出对象为json格式, 方便我们debug代码或者记录日志
/** * Format. * * @param obj * the obj * @param excludes * the excludes 排除需要序列化成json的属性 * @return the string */ public static String format(Object obj,String[] excludes){ JsonConfig jsonConfig = new JsonConfig(); // 排除,避免循环引用 There is a cycle in the hierarchy! jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); jsonConfig.setIgnoreDefaultExcludes(true); jsonConfig.setAllowNonStringKeys(true); if (Validator.isNotNullOrEmpty(excludes)){ jsonConfig.setExcludes(excludes); } String string = JsonUtil.toJSON(obj, jsonConfig).toString(4, 4); return string; }
相关推荐
ebean,sbean,dto
Java 四种方式操作xml,包括xml,dom,sax,jdom这四种方式的一个简单例子。
简单封装一个精美、好用的菜单型PopupWindow
其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员,需要对程序中常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程序而不会改程序的话,会极大影响到自己的开发的。关于异常的全部...
cannot be cast to javax.servlet.Filter 报错, 原因servlet-api.jar冲突 使用maven开发web应用程序, 启动的时候报错: jar not loaded....java.lang.ClassCastException: org.springframework.web.f
二:保证 ImageCycleView的 父布局是LinearLayout 否则可能会报异常,比如 java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.RelativeLayout$...
主要介绍了 java.util.ConcurrentModificationException 解决方法的相关资料,需要的朋友可以参考下
weblogic下转换oracle 的clob类型经常报转型错误,本例子通过反射解决weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB转型成oracle.sql.CLOB问题
例如,要在 REPL 中打印一个不错的堆栈跟踪: => (use 'clj-stacktrace.repl)=> ("foo")java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.IFn (NO_SOURCE_FILE:0) Compiler.java:...
java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource 可用这个jar替换...
Load canal adapter: es7 failed java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to ...canal-adapter1.1.5报错, 将...
44.java.lang.ClassCastException 类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。 45.java.lang....
解决canal同步es报错: java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource
主要介绍了Mybatis报错: org.apache.ibatis.exceptions.PersistenceException解决办法的相关资料,需要的朋友可以参考下
QQ 在线状态查询,主要解决java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive的问题,我们将改错误的SoapObject更改为 Object 类型,该错误即可消除
tomcat8.0.35刚好像没上传成功 java.lang.ClassCastException: org.slf4j.impl.Log4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext
ListView加载不同布局.解决异常ClassCastException
一个基本的libpython-clj项目 希望这将有助于重现我所观察到的问题,该问题在评估代码时启用了nREPL 0.8.2,Clojure 1.10.2... class java.lang.String cannot be cast to class clojure.lang.Keyword ( java.lang.Str
hive的一些报错及解决方法:连接报错、执行脚本卡住、内存溢出报错、表死锁问题