2017-09-07 2 views
0

Lors de la conversion de JSON en javaBean, j'ai reçu une exception NullPointerException.Erreur lors de la conversion de JSON en javaBean

C'est le 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 
       } 
      } 
     ] 
    } 
} 

Ceci est mon JSON à la méthode Javabean:

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 Classe: Quand je colle, je laisse de côté les méthodes d'obtenir() et le réglage () .Et JSONObject est net.sf.json.JSONObject;

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

Ce que je suis confus est que si je retire JSON à l'intérieur du « words_result »: le contenu, il n'y a pas de problème. Donc, je ne sais pas où c'était mal - est-ce que c'est mal avec le type, ou est-ce la mauvaise façon.

et c'est un message d'exception:

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) 

Causée par: java.lang.NullPointerException à net.sf.json.JSONObject.toBean (JSONObject.java:597) ... 100 plus

J'utilise Databean du KeLiuyue, il est working.but Je ne peux pas dire par words_resultsList.get (0) .getWords(), le 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) 
+0

Dans votre code JavaBean, est 'données JSONObject privé;' droite? – KeLiuyue

+0

Ça marche pour moi. Pouvez-vous ajouter la pile de l'exception? – tima

+0

[Comment créer un exemple minimal, complet et ** vérifiable **] (https://stackoverflow.com/help/mcve) – Andreas

Répondre

0

Essayez utiliser cette classe.

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; 
      } 
     } 
    } 
} 
} 

Modifier

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()); 
+0

Cela fonctionne. Merci. mais j'ai besoin de mots. C'est le message d'erreur: java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean ne peut pas être converti en com.picc.claim.interf.OCR.vo.Words_result \t at com.picc.claim .checkdefloss.web.CheckDefLossAction.OCRbyJSON (CheckDefLossAction.java:4259) \t au com.picc.claim.checkdefloss.web.CheckDefLossAction $$ $$ FastClassByCGLIB 591794c4.invoke () \t à net.sf.cglib.proxy .MethodProxy.invoke (MethodProxy.java:191) – yujia

+0

Il n'était pas clair de savoir dans le commentaire. Vous pouvez éditer dans votre question. – KeLiuyue

+0

J'ai mis à jour les informations, s'il vous plaît regardez-le. – yujia