TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
在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
解决方法:- public class Student implements java.io.Serializable{' Y( P9 b) g+ O4 k) s
: x& w$ v1 z" `9 J a# B+ l- /**
7 t" U( F2 b5 o - * @Fields serialVersionUID : TODO/ q( t; y4 i5 ^1 P! F' v
- */ ; O7 p; `" `4 O. @
- private static final long serialVersionUID = -1943961352036134112L;
8 z7 M0 y. T; B1 x* S& K - private String sname;! k: c/ [- M+ `# a" {
- private Integer age;
: I" f+ V- N; u" ^* V, ?6 k - public String getSname() {
' p0 w7 U0 K6 d, q. k - return sname;% }* o4 m/ q- L/ A3 g
- }
) }: ~+ M I# l# z. j! s% L - public void setSname(String sname) {# S& C( w' d3 O4 ^' ]+ g$ A, c
- this.sname = sname;
' F2 X. ^5 m; h1 W; n* o& R' c - }# D/ T; ^7 J, ^" ^3 d/ B% p
- public Integer getAge() {
. X; `7 q& k1 B; g+ K/ E - return age;% H" j" p; G# J k% r( N
- }
* l# F* @) X& E( H* \ - public void setAge(Integer age) {
& G* c% V' n( { - this.age = age;5 }! o$ U5 T! @% B0 z, @
- }
+ J v2 a" b- o$ F -
$ ]0 o% ~1 A* I3 N/ T' n/ k- X5 S7 C - }& 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- JSONObject jobj = JSONObject.fromObject(str);) x* S2 }! a3 k/ J7 d9 S( U
- 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- import java.util.List;1 F3 {% T$ X' g& ^& A. |
- /**
. i# r8 r* C! I8 M - * + }, ]5 e6 Y4 S: C* t8 @
- * <P>Tiltle: AnalysisModel.java </P>
9 k% c9 ]$ a- u/ R, D; b - * <P>Description:模型类 </P>$ @: b' M3 Z1 ^- h$ V5 |
- * @author biyutong
4 S9 { Y: W H' k9 \$ F - * @date Jun 11, 2012 9:37:54 AM 7 K/ y& d$ Y1 F
- * @version:V1.0
+ U+ U. y8 W6 \8 P6 M - */
8 n" \; Q* q5 @6 F3 g" Q# U$ Z+ ] - public class AnalysisModel implements java.io.Serializable{
' J1 ]- b H# }- j8 R y. b; C8 N3 s
1 p: Z u" [" b1 r- /** s0 A" ]& g/ @! h, W; p( m5 F8 g
- * 固定条件
+ m* G, G1 k$ D# ]# N" A8 x - */
# H5 ^7 u9 V8 ]6 G$ e. { - private List<Condition> regularCondtionList;//
# b( ~/ L& M# b6 { - /**
/ g/ |+ Q' W* j, [& S' @' z+ | - * 动态条件
3 x% X1 z- ]8 Y& C$ @& Y8 E - */1 h( A$ s0 ]8 p0 \6 p
- private List<ConditionField> dynamicConFieldList;, v$ Z( U" Y: k5 s7 m* ?; s
- /**
9 X* O. |4 E$ o - * 结果& ]4 W8 v$ a5 q" S# R: T0 Q+ q0 u
- */! v3 c; [% D& V# _% B [" q
- private List<ResultField> resultField;
* w- S$ ^! K( t$ w7 g) | - /**
, q4 S: k# k* ~' A& u! y6 N - * 获取前多少条数据. |' n- B9 w. ]: |+ M
- */4 z: J' F( ~7 K8 Y ]5 w
- private Integer topnum;6 W. X9 a' W& j
- /**6 A# S% _) u6 Z+ t' x, [
- * 顺序还是随机
' C: N3 D8 K: v1 w3 e) n - */
h2 J( X4 S* Q9 r7 x9 u& l - private String sortFlag;8 S0 g6 y2 I* F5 S4 x/ V" X) S$ |
- /**: G. _$ y! t+ i, X. |3 E
- * 备注0 X% n$ @8 t- ` \4 V% k: V
- */( o! o, E: F9 b7 u9 q
- private String remark;; a2 f% E5 Q y3 h4 j
- /**
4 f# Z% B0 g" p4 \! i - * 模型名称
# I! I6 P+ ]) B) Z. f2 s: F" G - */- ^$ J; c/ r* b; q! Y0 [# i7 o% `
- private String modelName;
5 I+ J4 i' O$ M6 g5 C$ r - /**: K0 v1 a( Y5 L& a3 I# A# B" u
- * 对应的xml文件名称9 R$ r8 V0 j+ { Q5 R
- */( _' f) W8 \" i$ v7 @# |! U
- private String fileName;! k7 p4 A! [. r5 e
- public List<Condition> getRegularCondtionList() {/ u3 x4 R1 h+ u7 ?
- return regularCondtionList;- J/ L0 A( f) k# |! C
- }. q/ a; U+ c; a: h/ P6 x
- public void setRegularCondtionList(List<Condition> regularCondtionList) {
: u5 {2 f4 X- G+ r3 P - this.regularCondtionList = regularCondtionList;. i" t' H8 Y: B* N
- }; }, J* c2 S1 G) X6 m
- public List<ConditionField> getDynamicConFieldList() {
8 a9 n3 y* H+ n- Y: c8 S - return dynamicConFieldList;
6 H* D. ?# @1 c$ C( w8 r9 t4 ? - }! M! s( @8 Y0 X! b" K
- public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) {
7 |1 O; D% a" @ - this.dynamicConFieldList = dynamicConFieldList;% i. D. H' v7 G
- } f2 t: E! q! e9 Q3 F1 t7 q
- public Integer getTopnum() {2 P# s3 s) W, D. {0 U$ S
- return topnum;
, k' u6 v8 i. e3 w, \- q% s N - }. ^' h& v9 y {+ k" e' S& e
- public void setTopnum(Integer topnum) {
, |7 {2 P& K2 T1 Q6 r. W. |, ? - this.topnum = topnum;+ r! X) N4 W& |2 B" l: D
- }
! t% p2 F$ f8 H - public String getSortFlag() {! }4 _/ G( E% \5 o3 ?/ C
- return sortFlag;1 m8 Q3 g+ K3 P7 Q
- }
9 K, w( E; p S$ D - public void setSortFlag(String sortFlag) {
) |3 {1 G2 u5 R8 Y - this.sortFlag = sortFlag;6 w& S- C2 S, ]2 s2 z
- }
# X! d3 K7 S2 l0 o" F$ h m9 ^- g - public String getRemark() {' m4 u& h T7 S8 f8 d- S, V$ `
- return remark;3 \4 W; r7 t1 Q' d
- }5 Q; [, N/ ]8 A( z: B
- public void setRemark(String remark) {( W8 r+ l0 @% Q/ S' l
- this.remark = remark;6 I, n% s* ], ^
- }# q! g7 o# p5 N+ T
- , {, I2 ?: C! [5 u5 W
-
/ z6 O; m/ X& l3 p) E. C& W6 M5 e5 G7 _1 C - public String getModelName() {6 }9 B8 t4 W: w
- return modelName;' }* E! R; }9 s% g/ _+ Z7 i4 W
- }& P( ~4 _: g/ h: p& ^
- public void setModelName(String modelName) {
7 g2 h0 Q* u/ J ] - this.modelName = modelName;
/ j/ l: |1 {) R" q! _) _$ Y: y. F - }
s5 M1 w8 ^6 i8 F5 r8 ? - public List<ResultField> getResultField() {5 N U% o. }5 K9 k: y* `5 W
- return resultField;
b+ |) I* o: \4 L& ^5 d! R0 Y - }
; e3 c5 b. u" x - public void setResultField(List<ResultField> resultField) { W( \3 ^4 R- c% Z& w4 Q
- this.resultField = resultField;% j1 `( F7 Z4 F( a4 s3 C* Y1 ]( x
- }/ s. Z3 ]1 u% A1 n
- public String getFileName() {: ~: u! }- t" u" K& I. Q
- return fileName;
3 B/ w& ^+ i" D) Y5 ~ - }! j0 g- j, T3 W; ^# o; R
- public void setFileName(String fileName) {% _) ~3 O+ |2 d( n6 Q3 v9 a
- this.fileName = fileName;1 x/ h* x. y, Y3 t
- }7 ~. D7 ]2 Y1 X5 W3 Z* @5 W' l4 U/ O" v
- $ m- _+ N; l( u, \" k4 r
- }
复制代码 在转化的时候需要这样来写:
$ f6 D/ c" y" A) Y- e6 ~! }- Map<String, Class> classMap = new HashMap<String, Class>();
1 _' Z+ U% y* P, }9 J
3 J) h# b+ b+ P: a, T- classMap.put("regularCondtionList", Condition.class);6 ?! `) T% i0 [9 R3 N3 S1 o
* Y3 E2 q( B; [" Y- classMap.put("dynamicConFieldList", ConditionField.class);
- X0 E. f: S8 b2 H, {) l3 C7 R/ ] - ! f+ T' b: O. |7 _# P8 x5 r5 m
- classMap.put("resultField", ResultField.class);8 D* W% S* ]$ A4 B" X+ U
8 c3 B' ~8 ]6 s9 y- 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 |
|