1. 程式人生 > >JSON字串轉javabean,MorphDynaBean cannot be cast to ……

JSON字串轉javabean,MorphDynaBean cannot be cast to ……

 在json字串轉java bean時,一般的物件,可以直接轉,如:一個學生類,屬性有姓名、年齡等

Java程式碼  收藏程式碼
  1. public class Student implements java.io.Serializable{  
  2.     /**  
  3.     * @Fields serialVersionUID : TODO 
  4.     */   
  5.     private static final long serialVersionUID = -1943961352036134112L;  
  6.     private String sname;  
  7.     private Integer age;  
  8.     public String getSname() {  
  9.         return sname;  
  10.     }  
  11.     public void setSname(String sname) {  
  12.         this.sname = sname;  
  13.     }  
  14.     public Integer getAge() {  
  15.         return age;  
  16.     }  
  17.     public void setAge(Integer age) {  
  18.         this.age = age;  
  19.     }  
  20. }  

  由字串轉java bean時可以使用以下方法:

Java程式碼  收藏程式碼
  1. JSONObject jobj = JSONObject.fromObject(str);  
  2. Student s = (Student) JSONObject.tobean(jobj,Student.class);  

    是沒有問題的,但是如果屬性中含有複雜的型別,當其中屬性有類似List , Map ,ArrayList、自定義的型別,如List<Teacher> teachers, 就不可以了。 會報錯:MorphDynaBean cannot be cast to con.test……

    在JSONObject.toBean的時候如果轉換的類中有集合,可以先定義Map<String, Class> classMap = new HashMap<String, Class>();在classMap中put你要轉換的類中的集合名,像:classMap.put("teachers", Teacher.class);然後在toBean()的時候把引數加上, 像:Student student=(Student) JSONObject.toBean(str, Student.class, classMap);

比如我定義瞭如下型別:

Java程式碼  收藏程式碼
  1. import java.util.List;  
  2. /** 
  3.  *  
  4. * <P>Tiltle: AnalysisModel.java </P> 
  5. * <P>Description:模型類  </P> 
  6. * @author biyutong 
  7. * @date Jun 11, 2012 9:37:54 AM  
  8. * @version:V1.0 
  9.  */  
  10. public class AnalysisModel implements java.io.Serializable{  
  11.     /** 
  12.      * 固定條件 
  13.      */  
  14.     private List<Condition> regularCondtionList;//  
  15.     /** 
  16.      * 動態條件 
  17.      */  
  18.     private List<ConditionField> dynamicConFieldList;  
  19.     /** 
  20.      * 結果 
  21.      */  
  22.     private List<ResultField> resultField;  
  23.     /** 
  24.      * 獲取前多少條資料 
  25.      */  
  26.     private Integer topnum;  
  27.     /** 
  28.      * 順序還是隨機 
  29.      */  
  30.     private String sortFlag;  
  31.     /** 
  32.      * 備註 
  33.      */  
  34.     private String remark;  
  35.     /** 
  36.      * 模型名稱 
  37.      */  
  38.     private String modelName;  
  39.     /** 
  40.      * 對應的xml檔名稱 
  41.      */  
  42.     private String fileName;  
  43.     public List<Condition> getRegularCondtionList() {  
  44.         return regularCondtionList;  
  45.     }  
  46.     public void setRegularCondtionList(List<Condition> regularCondtionList) {  
  47.         this.regularCondtionList = regularCondtionList;  
  48.     }  
  49.     public List<ConditionField> getDynamicConFieldList() {  
  50.         return dynamicConFieldList;  
  51.     }  
  52.     public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) {  
  53.         this.dynamicConFieldList = dynamicConFieldList;  
  54.     }  
  55.     public Integer getTopnum() {  
  56.         return topnum;  
  57.     }  
  58.     public void setTopnum(Integer topnum) {  
  59.         this.topnum = topnum;  
  60.     }  
  61.     public String getSortFlag() {  
  62.         return sortFlag;  
  63.     }  
  64.     public void setSortFlag(String sortFlag) {  
  65.         this.sortFlag = sortFlag;  
  66.     }  
  67.     public String getRemark() {  
  68.         return remark;  
  69.     }  
  70.     public void setRemark(String remark) {  
  71.         this.remark = remark;  
  72.     }  
  73.     public String getModelName() {  
  74.         return modelName;  
  75.     }  
  76.     public void setModelName(String modelName) {  
  77.         this.modelName = modelName;  
  78.     }  
  79.     public List<ResultField> getResultField() {  
  80.         return resultField;  
  81.     }  
  82.     public void setResultField(List<ResultField> resultField) {  
  83.         this.resultField = resultField;  
  84.     }  
  85.     public String getFileName() {  
  86.         return fileName;  
  87.     }  
  88.     public void setFileName(String fileName) {  
  89.         this.fileName = fileName;  
  90.     }  
  91. }  

 在轉化的時候需要這樣來寫:

Java程式碼  收藏程式碼
  1. Map<String, Class> classMap = new HashMap<String, Class>();  
  2. classMap.put("regularCondtionList", Condition.class);  
  3. classMap.put("dynamicConFieldList", ConditionField.class);  
  4. classMap.put("resultField", ResultField.class);  
  5. AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap);  

相關推薦

JSON字串javabeanMorphDynaBean cannot be cast to ……

 在json字串轉java bean時,一般的物件,可以直接轉,如:一個學生類,屬性有姓名、年齡等 Java程式碼   public class Student implements java.io.Serializable{       /**       *

JSON字串javabean-net.sf.ezmorph.bean.MorphDynaBean cannot be cast to java.util.Map

會報錯:MorphDynaBean cannot be cast to java.util.Map     在JSONObject.toBean的時候如果轉換的類中有集合,可以先定義Map<String, Class> classMap = new Hash

java後臺接收json資料報錯com.alibaba.fastjson.JSONObject cannot be cast to xxx

  從前臺接收json封裝的list資料,在後臺接收時一直報錯,com.alibaba.fastjson.JSONObject cannot be cast to xxx,   使用這種方式接收可以接收 1 @RequestMapping(value = "/insertUser", method

java.lang.Integer cannot be cast to java.lang.String Java intdouble向String的轉化和String向intdouble的轉換

 count=Integer.parseInt( (String)all.get(0)); 執行時報錯:java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 解決方

解決kylin報錯 ClassCastException org.apache.hadoop.hive.ql.exec.ConditionalTask cannot be cast to org.apache.hadoop.hive.ql.exec.mr.MapRedTask

conf lan exe hive oop ann 關於 .exe map 方法:去掉參數SET hive.auto.convert.join=true; 從配置文件$KYLIN_HOME/conf/kylin_hive_conf.xml刪掉 或 kylin-gui的cu

“無效數字” ;java.lang.Integer cannot be cast to java.lang.String

現在 類型 bsp 字段 ann 不難 esc ger ring 今天頁面上突然查詢不出數據,大致的sql語句是 select xx ,xxx from table a where a.lrmb in ( 6101060033, 6101

org.slf4j.impl.Log4jLoggerAdapter cannot be cast to ch.qos.logback.classic.Logger

sock sso ring logger cat existing col classic con https://stackoverflow.com/questions/31433246/classcastexception-org-slf4j-impl-log4j

2類型轉換異常:Exception in thread "main" java.lang.ClassCastException:java.lang.Object cannot be cast to java.lang.Integer

cnblogs color pan rgs main string [] 類型 style public class TestException { public static void main(String[] args) { Object obj

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

protocol lang base arr ava ebs reat rac context 1、錯誤描寫敘述java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Str

org.apache.shiro.web.servlet.ShiroHttpServletRequest cannot be cast to org.springframwork.web.mult..

avi 時間 div col rac ext framwork 框架 報錯 在用dwz框架+spring MVC時上傳文件報的錯 詳細錯誤例如以下: 事實上就是一個類型轉換錯誤,但卻研究了好長時間,怎麽都不知道哪裏錯了。由於前面卸過一個文

java.math.BigDecimal cannot be cast to java.lang.String

bigdecimal BigDecimal表示一個大整數,一般情況下很多整型都有個最大值的,但是有時候我們需要處理一些超過這個最大值的值,這個時候就出現了BigDecimal這樣的類用於表達大數值,這個錯誤應該是類型轉換過程中出現了問題.數據從數據庫中取出的,把數據庫中的整數轉成了BigDecimal 類型

WebLogic部署報java.lang.ClassCastException: weblogic.xml.jaxp.RegistrySAXParserFactory cannot be cast to javax.xml.parsers.SAXParserFactory

jar包 使用 jar包沖突 ava 項目 div factor c項目 sax 今天在部署WebLogic項目時,報了java.lang.ClassCastException: weblogic.xml.jaxp.RegistrySAXParserFactory cann

java.lang.Integer cannot be cast to java.lang.String

.com ger 調用 str 覆蓋 方法 pan 解決辦法 ava 錯誤原因是類型轉換! 說Integer 類型不能轉成String類型。 解決辦法:   將錯誤中的(String)強制轉換類型修改為 object.toString()   

tomcat啟動報錯:java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to..

啟動tomcat的專案報錯如下: 解決思路: 1.看到這個錯誤,java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to org.apache.jasper.el.ELC

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

在開發中,遇到這麼一個錯誤: 報錯的意思: Long 無法轉化成Integer型別. 網上的解釋是:     這裡在Hibernate2.0之前版本list.get(0)返回的是Integer型別.但是在Hibernate3.0以後版本list.ge

maven org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter

maven專案解決辦法:    對於servlet-ap.jar 新增<scope>provided</scope> 即可解決。      <dependency> &l

Java報錯:java.math.BigDecimal cannot be cast to java.lang.String

從資料庫取count、sum等函式的值需要轉化成Integer的時候出現 java.math.BigDecimal cannot be cast to java.lang.String的報錯 錯誤程式碼: Integer.parseInt((String)map.get("id"

java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long

MySQL更新到8.0.11之後連線資料庫時會報出錯誤 Your login attempt was not successful, try again. Reason: Could not get JDBC Connection; nested exception is java.sql.SQ

com.rr.domain.Department_$$_javassist_5 cannot be cast to javassist.util.proxy.Proxy

com.rr.domain.Department_$$_javassist_5 cannot be cast to javassist.util.proxy.Proxy 兩個原因: 1、懶載入 在web.xml配置opensessioninviewfilter,須在struts2的s

hibernate-spring測試報錯:com.sun.proxy.$Proxy44 cannot be cast to com.mm.service.imp.RoleServic

錯誤內容 java.lang.ClassCastException: com.sun.proxy.$Proxy44 cannot be cast to com.mm.service.imp.RoleServiceImp 測試程式碼 ApplicationContext conte