科帮网

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > net.sf.ezmorph.bean.MorphDynaBean cannot be cast to
总共48087条微博

动态微博

查看: 16764|回复: 0

net.sf.ezmorph.bean.MorphDynaBean cannot be cast to

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2015-05-05 09:30:30 |只看该作者 |倒序浏览
    在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等2 V/ s$ X( p7 F0 L
    但是如果存在List集合就会出新net.sf.ezmorph.bean.MorphDynaBean cannot be cast to 错误。7 H* A3 n: N4 s4 J/ @; z
    解决方法:
    1. public class Student implements java.io.Serializable{' Y( P9 b) g+ O4 k) s

    2. : x& w$ v1 z" `9 J  a# B+ l
    3.         /**
      7 t" U( F2 b5 o
    4.         * @Fields serialVersionUID : TODO/ q( t; y4 i5 ^1 P! F' v
    5.         */ ; O7 p; `" `4 O. @
    6.         private static final long serialVersionUID = -1943961352036134112L;
      8 z7 M0 y. T; B1 x* S& K
    7.         private String sname;! k: c/ [- M+ `# a" {
    8.         private Integer age;
      : I" f+ V- N; u" ^* V, ?6 k
    9.         public String getSname() {
      ' p0 w7 U0 K6 d, q. k
    10.                 return sname;% }* o4 m/ q- L/ A3 g
    11.         }
      ) }: ~+ M  I# l# z. j! s% L
    12.         public void setSname(String sname) {# S& C( w' d3 O4 ^' ]+ g$ A, c
    13.                 this.sname = sname;
      ' F2 X. ^5 m; h1 W; n* o& R' c
    14.         }# D/ T; ^7 J, ^" ^3 d/ B% p
    15.         public Integer getAge() {
      . X; `7 q& k1 B; g+ K/ E
    16.                 return age;% H" j" p; G# J  k% r( N
    17.         }
      * l# F* @) X& E( H* \
    18.         public void setAge(Integer age) {
      & G* c% V' n( {
    19.                 this.age = age;5 }! o$ U5 T! @% B0 z, @
    20.         }
      + J  v2 a" b- o$ F
    21.        
      $ ]0 o% ~1 A* I3 N/ T' n/ k- X5 S7 C
    22. }& q( i$ U* e- r+ I; K! E
    复制代码
    由字符串转java bean时可以使用以下方法:6 v# H- J2 U3 h1 I& k1 \

    ( c; p2 E6 y, X3 l/ T
    1. JSONObject jobj = JSONObject.fromObject(str);) x* S2 }! a3 k/ J7 d9 S( U
    2. Student s = (Student) JSONObject.tobean(jobj,Student.class);
    复制代码
      {' n; M: v5 r5 N5 k3 R  ]: d
    是没有问题的,但是如果属性中含有复杂的类型,当其中属性有类似List , Map ,ArrayList、自定义的类型,如List<Teacher> teachers, 就不可以了。 会报错:MorphDynaBean cannot be cast to con.test……6 F# }3 z* B4 n; j: \* x% B. F
        在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);7 x$ S0 q* H* ~) u
      ^( ~: C' L$ K$ `/ S0 z2 {5 o
    比如我定义了如下类型:
    / L5 c& ]0 ^" T. k
    1. import java.util.List;1 F3 {% T$ X' g& ^& A. |
    2. /**
      . i# r8 r* C! I8 M
    3. * + }, ]5 e6 Y4 S: C* t8 @
    4. * <P>Tiltle: AnalysisModel.java </P>
      9 k% c9 ]$ a- u/ R, D; b
    5. * <P>Description:模型类  </P>$ @: b' M3 Z1 ^- h$ V5 |
    6. * @author biyutong
      4 S9 {  Y: W  H' k9 \$ F
    7. * @date Jun 11, 2012 9:37:54 AM 7 K/ y& d$ Y1 F
    8. * @version:V1.0
      + U+ U. y8 W6 \8 P6 M
    9. */
      8 n" \; Q* q5 @6 F3 g" Q# U$ Z+ ]
    10. public class AnalysisModel implements java.io.Serializable{
      ' J1 ]- b  H# }- j8 R  y. b; C8 N3 s

    11. 1 p: Z  u" [" b1 r
    12.         /**  s0 A" ]& g/ @! h, W; p( m5 F8 g
    13.          * 固定条件
      + m* G, G1 k$ D# ]# N" A8 x
    14.          */
      # H5 ^7 u9 V8 ]6 G$ e. {
    15.         private List<Condition> regularCondtionList;//
      # b( ~/ L& M# b6 {
    16.         /**
      / g/ |+ Q' W* j, [& S' @' z+ |
    17.          * 动态条件
      3 x% X1 z- ]8 Y& C$ @& Y8 E
    18.          */1 h( A$ s0 ]8 p0 \6 p
    19.         private List<ConditionField> dynamicConFieldList;, v$ Z( U" Y: k5 s7 m* ?; s
    20.         /**
      9 X* O. |4 E$ o
    21.          * 结果& ]4 W8 v$ a5 q" S# R: T0 Q+ q0 u
    22.          */! v3 c; [% D& V# _% B  [" q
    23.         private List<ResultField> resultField;
      * w- S$ ^! K( t$ w7 g) |
    24.         /**
      , q4 S: k# k* ~' A& u! y6 N
    25.          * 获取前多少条数据. |' n- B9 w. ]: |+ M
    26.          */4 z: J' F( ~7 K8 Y  ]5 w
    27.         private Integer topnum;6 W. X9 a' W& j
    28.         /**6 A# S% _) u6 Z+ t' x, [
    29.          * 顺序还是随机
      ' C: N3 D8 K: v1 w3 e) n
    30.          */
        h2 J( X4 S* Q9 r7 x9 u& l
    31.         private String sortFlag;8 S0 g6 y2 I* F5 S4 x/ V" X) S$ |
    32.         /**: G. _$ y! t+ i, X. |3 E
    33.          * 备注0 X% n$ @8 t- `  \4 V% k: V
    34.          */( o! o, E: F9 b7 u9 q
    35.         private String remark;; a2 f% E5 Q  y3 h4 j
    36.         /**
      4 f# Z% B0 g" p4 \! i
    37.          * 模型名称
      # I! I6 P+ ]) B) Z. f2 s: F" G
    38.          */- ^$ J; c/ r* b; q! Y0 [# i7 o% `
    39.         private String modelName;
      5 I+ J4 i' O$ M6 g5 C$ r
    40.         /**: K0 v1 a( Y5 L& a3 I# A# B" u
    41.          * 对应的xml文件名称9 R$ r8 V0 j+ {  Q5 R
    42.          */( _' f) W8 \" i$ v7 @# |! U
    43.         private String fileName;! k7 p4 A! [. r5 e
    44.         public List<Condition> getRegularCondtionList() {/ u3 x4 R1 h+ u7 ?
    45.                 return regularCondtionList;- J/ L0 A( f) k# |! C
    46.         }. q/ a; U+ c; a: h/ P6 x
    47.         public void setRegularCondtionList(List<Condition> regularCondtionList) {
      : u5 {2 f4 X- G+ r3 P
    48.                 this.regularCondtionList = regularCondtionList;. i" t' H8 Y: B* N
    49.         }; }, J* c2 S1 G) X6 m
    50.         public List<ConditionField> getDynamicConFieldList() {
      8 a9 n3 y* H+ n- Y: c8 S
    51.                 return dynamicConFieldList;
      6 H* D. ?# @1 c$ C( w8 r9 t4 ?
    52.         }! M! s( @8 Y0 X! b" K
    53.         public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) {
      7 |1 O; D% a" @
    54.                 this.dynamicConFieldList = dynamicConFieldList;% i. D. H' v7 G
    55.         }  f2 t: E! q! e9 Q3 F1 t7 q
    56.         public Integer getTopnum() {2 P# s3 s) W, D. {0 U$ S
    57.                 return topnum;
      , k' u6 v8 i. e3 w, \- q% s  N
    58.         }. ^' h& v9 y  {+ k" e' S& e
    59.         public void setTopnum(Integer topnum) {
      , |7 {2 P& K2 T1 Q6 r. W. |, ?
    60.                 this.topnum = topnum;+ r! X) N4 W& |2 B" l: D
    61.         }
      ! t% p2 F$ f8 H
    62.         public String getSortFlag() {! }4 _/ G( E% \5 o3 ?/ C
    63.                 return sortFlag;1 m8 Q3 g+ K3 P7 Q
    64.         }
      9 K, w( E; p  S$ D
    65.         public void setSortFlag(String sortFlag) {
      ) |3 {1 G2 u5 R8 Y
    66.                 this.sortFlag = sortFlag;6 w& S- C2 S, ]2 s2 z
    67.         }
      # X! d3 K7 S2 l0 o" F$ h  m9 ^- g
    68.         public String getRemark() {' m4 u& h  T7 S8 f8 d- S, V$ `
    69.                 return remark;3 \4 W; r7 t1 Q' d
    70.         }5 Q; [, N/ ]8 A( z: B
    71.         public void setRemark(String remark) {( W8 r+ l0 @% Q/ S' l
    72.                 this.remark = remark;6 I, n% s* ], ^
    73.         }# q! g7 o# p5 N+ T
    74. , {, I2 ?: C! [5 u5 W
    75.        
      / z6 O; m/ X& l3 p) E. C& W6 M5 e5 G7 _1 C
    76.         public String getModelName() {6 }9 B8 t4 W: w
    77.                 return modelName;' }* E! R; }9 s% g/ _+ Z7 i4 W
    78.         }& P( ~4 _: g/ h: p& ^
    79.         public void setModelName(String modelName) {
      7 g2 h0 Q* u/ J  ]
    80.                 this.modelName = modelName;
      / j/ l: |1 {) R" q! _) _$ Y: y. F
    81.         }
        s5 M1 w8 ^6 i8 F5 r8 ?
    82.         public List<ResultField> getResultField() {5 N  U% o. }5 K9 k: y* `5 W
    83.                 return resultField;
        b+ |) I* o: \4 L& ^5 d! R0 Y
    84.         }
      ; e3 c5 b. u" x
    85.         public void setResultField(List<ResultField> resultField) {  W( \3 ^4 R- c% Z& w4 Q
    86.                 this.resultField = resultField;% j1 `( F7 Z4 F( a4 s3 C* Y1 ]( x
    87.         }/ s. Z3 ]1 u% A1 n
    88.         public String getFileName() {: ~: u! }- t" u" K& I. Q
    89.                 return fileName;
      3 B/ w& ^+ i" D) Y5 ~
    90.         }! j0 g- j, T3 W; ^# o; R
    91.         public void setFileName(String fileName) {% _) ~3 O+ |2 d( n6 Q3 v9 a
    92.                 this.fileName = fileName;1 x/ h* x. y, Y3 t
    93.         }7 ~. D7 ]2 Y1 X5 W3 Z* @5 W' l4 U/ O" v
    94.         $ m- _+ N; l( u, \" k4 r
    95. }
    复制代码
    在转化的时候需要这样来写:
    $ f6 D/ c" y" A) Y- e6 ~! }
    1. Map<String, Class> classMap = new HashMap<String, Class>();
      1 _' Z+ U% y* P, }9 J

    2. 3 J) h# b+ b+ P: a, T
    3. classMap.put("regularCondtionList", Condition.class);6 ?! `) T% i0 [9 R3 N3 S1 o

    4. * Y3 E2 q( B; [" Y
    5. classMap.put("dynamicConFieldList", ConditionField.class);
      - X0 E. f: S8 b2 H, {) l3 C7 R/ ]
    6. ! f+ T' b: O. |7 _# P8 x5 r5 m
    7. classMap.put("resultField", ResultField.class);8 D* W% S* ]$ A4 B" X+ U

    8. 8 c3 B' ~8 ]6 s9 y
    9. AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap);
    复制代码

    1 N! c- ~" q) G( V+ U) r; v" O- F, g8 h+ f3 R) J+ E' m

    # N$ Y0 h/ h- P+ m) B  e, `3 z+ D

    , z: e) u0 c* U1 u

    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表