码迷,mamicode.com
首页 > 编程语言 > 详细

json解析异常 - net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

时间:2015-04-18 19:03:59      阅读:1201      评论:0      收藏:0      [点我收藏+]

标签:

注:在项目中, 我使用原生的ajax请求数据的时候, JSONObject没能帮我解析, 当却不给我报错, 我是在junit单元测试中测试的时候, 发现的.发现好多时候, 特别是通过ajax请求, 不给我们报错,很郁闷, 特别是ie, 有些问题, 得借助FireFox的返回结果分析.

当然, FireFox有时也没报错.

异常栈:

技术分享
net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
    at net.sf.json.JSONObject._fromBean(JSONObject.java:953)
    at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
    at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
    at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)
    at net.sf.json.JSONObject.setValue(JSONObject.java:1507)
    at net.sf.json.JSONObject._fromBean(JSONObject.java:940)
    at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
    at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
    at net.sf.json.JSONObject.processValue(JSONObject.java:2833)
    at net.sf.json.JSONObject.element(JSONObject.java:1871)
    at net.sf.json.JSONObject.element(JSONObject.java:1849)
    at net.sf.json.JSONObject.put(JSONObject.java:2466)
    at sys_bd.json.JsonService.getJsonStr(JsonService.java:8)
    at com.bd.action.LockAction.queryMapByAttSuccess(LockAction.java:442)
    at com.db.action.LockActionTest.testEncapsulateLockAsJson(LockActionTest.java:40)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:1773)
    at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1132)
    at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686)
    at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
    at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290)
    at net.sf.json.JSONObject._fromBean(JSONObject.java:928)
    ... 37 more
Caused by: java.lang.IllegalArgumentException
    at java.sql.Date.getHours(Date.java:182)
    ... 47 more
View Code

该问题描述了使用json封装对象的时候, 对于日期格式,报该错.

有的人说将对象的getter指定包(java.uti.Date)就可以, 但是我测试发现不可以.

我的解决方案是参考: http://segmentfault.com/q/1010000000095526

工具类为:使用config对象

package sys_bd.json;

import java.text.SimpleDateFormat;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

public class JsonService {
    private JsonService() {}
    
    private static final JsonConfig jsonConfig = init();

    private static JsonConfig init() {
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.registerJsonValueProcessor(java.util.Date.class,
                new JsonValueProcessor() {
                    private SimpleDateFormat sd = new SimpleDateFormat(
                            "yyyy-MM-dd");

                    public Object processObjectValue(String key, Object value,
                            JsonConfig jsonConfig) {
                        return value == null ? "" : sd.format(value);
                    }

                    public Object processArrayValue(Object value,
                            JsonConfig jsonConfig) {
                        return null;
                    }
                });
        return jsonConfig;
    }

    public static String getJsonStr(String key, Object value) {
        //使用config对象.
        JSONObject jsonObject = JSONObject.fromObject(value, jsonConfig);
        return jsonObject.toString();
    }
}

 

json解析异常 - net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

标签:

原文地址:http://www.cnblogs.com/listened/p/4437722.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!