将JSON转换为javaBean时出错

时间:2017-09-07 01:31:28

标签: java json web nullpointerexception

将JSON转换为javaBean时,我遇到了NullPointerException。

这是JSON:

{
    "errno": 0,
    "msg": "success",
    "data": {
        "direction": 0,
        "words_result_num": 19,
        "words_result": [
            {
                "words": "车辆管理产品资料库",
                "probability": {
                    "variance": 0.006179,
                    "average": 0.95664,
                    "min": 0.746422
                }
            },
            {
                "words": "盛简体中文",
                "probability": {
                    "variance": 0.052477,
                    "average": 0.84753,
                    "min": 0.407953
                }
            },
            {
                "words": "户姓名段红车辆:BW53 5 i ( wbasp2101cDR76734}内莎利号,BMEW43999",
                "probability": {
                    "variance": 0.030252,
                    "average": 0.856571,
                    "min": 0.503605
                }
            },
            {
                "words": "保险公司",
                "probability": {
                    "variance": 0.045034,
                    "average": 0.847951,
                    "min": 0.48522
                }
            }
        ]
    }
}

这是我对javaBean方法的JSON:

public String OCRbyJSON(){
    OCRResultVo ObjResult = null ;
    if(StringUtils.isNotBlank(strJson)){
        try {
            JSONObject  jsStr = JSONObject.fromObject(strJson);
            jsStr.remove("unknown");

            ObjResult  = (OCRResultVo) JSONObject.toBean(jsStr,OCRResultVo.class);
            System.out.println("");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return NONE;
}

OCRResultVo类:当我粘贴它时,我省略了Getting()和Setting()的方法。而JSONObject是net.sf.json.JSONObject;

public class OCRResultVo {
    private String errno;
    private String msg;
    private JSONObject data;
}

我感到困惑的是,如果我在" words_result"内容中删除JSON,则没有问题。所以我不知道错在哪里 - 这种类型是错的,还是错误的方式。

这是异常消息:

net.sf.json.JSONException: java.lang.NullPointerException
at net.sf.json.JSONObject.toBean(JSONObject.java:670)
at net.sf.json.JSONObject.toBean(JSONObject.java:642)
at net.sf.json.JSONObject.toBean(JSONObject.java:542)
at com.picc.claim.checkdefloss.web.CheckDefLossAction.OCRbyJSON(CheckDefLossAction.java:4254)
at com.picc.claim.checkdefloss.web.CheckDefLossAction$$FastClassByCGLIB$$591794c4.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:700)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at ins.framework.log.RunTimeLogAdvice.invoke(RunTimeLogAdvice.java:31)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
at com.picc.claim.checkdefloss.web.CheckDefLossAction$$EnhancerByCGLIB$$2ea2627c.OCRbyJSON(<generated>)
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:601)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at com.sinosoft.filter.SessionFilter.doFilter(SessionFilter.java:97)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at cn.com.sinosoft.cas.filter.CustomCASFilter.doFilter(CustomCASFilter.java:332)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:76)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at ins.framework.web.UrlFilter.doFilter(UrlFilter.java:95)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at com.picc.aop.log.tool.WebAopFilter.doFilter(WebAopFilter.java:44)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at com.picc.aop.log.tool.RequestFilter.doFilter(RequestFilter.java:34)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3436)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3402)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)

引起:java.lang.NullPointerException     at net.sf.json.JSONObject.toBean(JSONObject.java:597)     ......还有100多个

我使用了KeLiuyue的Databean,它正在工作。但是我无法通过words_resultsList.get(0).getWords(),massgeg:

来获取单词。
java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.picc.claim.interf.OCR.vo.Words_result
at com.picc.claim.checkdefloss.web.CheckDefLossAction.OCRbyJSON(CheckDefLossAction.java:4259)
at com.picc.claim.checkdefloss.web.CheckDefLossAction$$FastClassByCGLIB$$591794c4.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)

1 个答案:

答案 0 :(得分:0)

尝试使用此课程。

public class OCRResultVo {

/**
 * errno : 0
 * msg : success
 * data : {"direction":0,"words_result_num":19,"words_result":[{"words":"车辆管理产品资料库","probability":{"variance":0.006179,"average":0.95664,"min":0.746422}},{"words":"盛简体中文","probability":{"variance":0.052477,"average":0.84753,"min":0.407953}},{"words":"户姓名段红车辆:BW53 5 i ( wbasp2101cDR76734}内莎利号,BMEW43999","probability":{"variance":0.030252,"average":0.856571,"min":0.503605}},{"words":"保险公司","probability":{"variance":0.045034,"average":0.847951,"min":0.48522}}]}
 */

private int errno;
private String msg;
private DataBean data;

public int getErrno() {
    return errno;
}

public void setErrno(int errno) {
    this.errno = errno;
}

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}

public DataBean getData() {
    return data;
}

public void setData(DataBean data) {
    this.data = data;
}

public static class DataBean {
    /**
     * direction : 0
     * words_result_num : 19
     * words_result : [{"words":"车辆管理产品资料库","probability":{"variance":0.006179,"average":0.95664,"min":0.746422}},{"words":"盛简体中文","probability":{"variance":0.052477,"average":0.84753,"min":0.407953}},{"words":"户姓名段红车辆:BW53 5 i ( wbasp2101cDR76734}内莎利号,BMEW43999","probability":{"variance":0.030252,"average":0.856571,"min":0.503605}},{"words":"保险公司","probability":{"variance":0.045034,"average":0.847951,"min":0.48522}}]
     */

    private int direction;
    private int words_result_num;
    private List<WordsResultBean> words_result;

    public int getDirection() {
        return direction;
    }

    public void setDirection(int direction) {
        this.direction = direction;
    }

    public int getWords_result_num() {
        return words_result_num;
    }

    public void setWords_result_num(int words_result_num) {
        this.words_result_num = words_result_num;
    }

    public List<WordsResultBean> getWords_result() {
        return words_result;
    }

    public void setWords_result(List<WordsResultBean> words_result) {
        this.words_result = words_result;
    }

    public static class WordsResultBean {
        /**
         * words : 车辆管理产品资料库
         * probability : {"variance":0.006179,"average":0.95664,"min":0.746422}
         */

        private String words;
        private ProbabilityBean probability;

        public String getWords() {
            return words;
        }

        public void setWords(String words) {
            this.words = words;
        }

        public ProbabilityBean getProbability() {
            return probability;
        }

        public void setProbability(ProbabilityBean probability) {
            this.probability = probability;
        }

        public static class ProbabilityBean {
            /**
             * variance : 0.006179
             * average : 0.95664
             * min : 0.746422
             */

            private double variance;
            private double average;
            private double min;

            public double getVariance() {
                return variance;
            }

            public void setVariance(double variance) {
                this.variance = variance;
            }

            public double getAverage() {
                return average;
            }

            public void setAverage(double average) {
                this.average = average;
            }

            public double getMin() {
                return min;
            }

            public void setMin(double min) {
                this.min = min;
            }
        }
    }
}
}

修改

Map<String, Class<OCRResultVo.DataBean.WordsResultBean>> classMap = new HashMap<String, Class<>>();
classMap.put("words_result", OCRResultVo.DataBean.WordsResultBean.class);
JSONObject  jsStr = JSONObject.fromObject(strJson);
jsStr.remove("unknown");

ObjResult  = (OCRResultVo) JSONObject.toBean(jsStr,OCRResultVo.class,classMap);
ObjResult.setId(UUID.randomUUID().toString());