Java Date轉Json報錯解決方案


報錯信息為:

Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:2155)
	at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1323)
	at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762)
	at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
	at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
	at net.sf.json.JSONObject.defaultBeanProcessing(JSONObject.java:749)
	... 55 more
Caused by: java.lang.IllegalArgumentException
	at java.sql.Date.getHours(Date.java:187)
	... 65 more

原因:

java.sql.util.Date類的getHours方法已經被棄用,但是net.sf.json.JSONObject.fromObject(javaObject)進行json序列化的時候仍然調用了這個方法。

這篇博客中描述的很詳細:https://segmentfault.com/a/1190000016937108

結局方法:

json-lib有一個配置類JsonConfig,通過JsonConfig可以注冊一個字段處理器,通過實現JsonValueProcessor接口,將Date格式化后使用。

加入依賴:

		<dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>

實現接口:

@Test
public void testJson(){
    Map<String, Object> mp = new ModelMap();
    mp.put("server",server.getAll());

    JsonConfig config = new JsonConfig();
    config.registerJsonValueProcessor(java.sql.Date.class, new JsonValueProcessor() {
        private SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");

        @Override
        public Object processArrayValue(Object arg0, JsonConfig arg1) {
            return null;
        }

        @Override
        public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) {
            return arg1 == null ? "" : sd.format(arg1);
        }
    });

    JSONObject jsonObject = JSONObject.fromObject(mp);

    String msg = jsonObject.toString();
    System.out.println(msg);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM