TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等% K+ w2 G% j" z% j7 @
但是如果存在List集合就会出新net.sf.ezmorph.bean.MorphDynaBean cannot be cast to 错误。# ~3 z% ^% w1 z/ A" S$ f+ g
解决方法:- public class Student implements java.io.Serializable{
& L/ D9 J" Y. w - * S$ z4 |8 [2 y% P
- /** $ ^/ n$ X! h5 F" f% N7 {1 T4 {
- * @Fields serialVersionUID : TODO
4 `# J A! I! _1 Q/ Z - */ % x6 I. z! X! V8 q Z7 q4 _6 _& x+ O
- private static final long serialVersionUID = -1943961352036134112L;
1 _0 U1 w& s7 P: `' f - private String sname;& F' J- l, |& Y( A( u# @0 V
- private Integer age;
A2 ]5 ^5 X' n/ s4 I - public String getSname() {
. Y0 b. o" R) l, M1 s) N L9 V - return sname;2 c) S; n# r& J
- }
7 } i! q; e8 z8 K4 i5 a3 \' n% \4 }. V5 \ - public void setSname(String sname) {
( t; @* q# L* N - this.sname = sname;' p! L+ o; H# v6 B; H
- }
6 |$ T0 c( D" V* E - public Integer getAge() {
5 u4 z( x/ \2 b2 z/ _ L - return age;. b; r, Z# Y; _
- }* L) s# Q1 t+ M9 k, d; ?
- public void setAge(Integer age) {. [$ M4 K; H% M/ Y9 R
- this.age = age;, I' I2 p& c2 p' p
- }/ f* d. `9 P4 Y) k2 D
- 8 ^' e9 l6 ^- h `8 W
- }2 o& J6 x& ]" a4 o3 i; a1 g
复制代码 由字符串转java bean时可以使用以下方法:
& ]& w" j, a G0 A! n, p( [6 B( G9 r( x) B9 O3 _- `4 ~# O, D
- JSONObject jobj = JSONObject.fromObject(str);
- `5 A) P* t5 A- G9 c* W3 h+ E! I - Student s = (Student) JSONObject.tobean(jobj,Student.class);
复制代码 ' u3 ?: g$ Z3 ]- c& Z/ R# ]
是没有问题的,但是如果属性中含有复杂的类型,当其中属性有类似List , Map ,ArrayList、自定义的类型,如List<Teacher> teachers, 就不可以了。 会报错:MorphDynaBean cannot be cast to con.test……) ^& ?) `# n. ?. v) c
在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);
@) I' [: B2 i5 Y6 E
* s, @! y! ^, ?# X' j5 ?- b比如我定义了如下类型:
, n- X" p" I& V. V0 |- S% V- import java.util.List;! F# B# |3 X7 B4 v' S5 n
- /**% c/ A& [8 H5 N0 Q m" g
- *
3 [3 @ K3 p3 Q: S4 | - * <P>Tiltle: AnalysisModel.java </P>; W( O* w+ Q# {0 T* A
- * <P>Description:模型类 </P>! N) _) |, m5 H* N! @- q
- * @author biyutong
; h$ X2 ]7 `2 [5 t4 ^ - * @date Jun 11, 2012 9:37:54 AM ' [) M- v" V. ]" |: F8 S$ i7 Q
- * @version:V1.0
* j9 Z5 k2 C2 e* N, t: p4 B/ \ - */
u3 {- y4 Y( n; c/ C2 Y4 [ - public class AnalysisModel implements java.io.Serializable{
) N3 B4 r/ x" s
. M, K! ]! m8 G6 Z; B- /**
& Z4 a. g0 Y7 f+ B- i - * 固定条件$ l; X; e; ?" M: |. O
- */( O5 I' |4 A& G, k6 A1 q5 c3 }
- private List<Condition> regularCondtionList;//
' s0 A4 \ a$ m" t9 m. Q5 T - /**- v8 }' S0 X: b- B e# S
- * 动态条件. ~0 q8 {% n1 S$ U8 C
- */7 {- }% ~& h- N3 U, k
- private List<ConditionField> dynamicConFieldList;3 Y: ^3 e, f8 t1 b
- /**
" P1 O3 h% W5 D. B d4 J - * 结果
9 w, W2 x( g. a9 u; g9 X" E: i7 e5 i - */7 H( f' E* _* |1 E4 }( t" z' w6 g3 l
- private List<ResultField> resultField;& r/ [5 b: ~+ o1 x2 _4 e
- /**
0 p. y+ |: {$ D8 s5 i R - * 获取前多少条数据3 b$ f! {* @8 y
- */
7 _# Y* e# `' M, l$ X - private Integer topnum;7 ?! p" O6 s9 e; N/ b: V
- /**- @% Q. |- [8 V9 K7 E, o
- * 顺序还是随机. O' x0 {$ |0 j7 q) F# Q
- */& l5 @; k5 k9 p5 m( @
- private String sortFlag;) Z; x+ C+ N% W$ W( b: f
- /**: l7 u" E1 q7 X: A. u5 j
- * 备注
" a6 I, G+ C9 d: L- w1 [ - */
, x( S* }; G, i1 y - private String remark;6 U7 P: y l& u1 B* Y
- /**6 X! D2 d* d8 @: R3 f4 i4 G h0 \' u
- * 模型名称4 \% N; j. S+ t1 D ~# W0 \
- */6 M" s$ X7 }0 ^! g0 I% E
- private String modelName;9 y3 f) i. p0 a( }
- /**
, Y3 }7 f' M5 ]+ ~ - * 对应的xml文件名称- B. Q& F5 I p0 n: b" R
- */
6 A) _& ^6 w) g" f3 y) P- ~! h - private String fileName;5 \' W8 t( ?) Z+ ^" g
- public List<Condition> getRegularCondtionList() {1 a! M5 T' ^: p f6 c# v: h9 c2 s# X
- return regularCondtionList;
* S& ?! s& A% F( G5 K* Z0 |' M - }
0 @8 |; e& q& h. w$ G - public void setRegularCondtionList(List<Condition> regularCondtionList) {$ {* v9 J) v7 t/ N0 t8 V
- this.regularCondtionList = regularCondtionList;: b7 ^. n; w: h6 E$ [
- }, V6 m' C' U Q
- public List<ConditionField> getDynamicConFieldList() {
1 N. o1 f( ? K2 Q" ] - return dynamicConFieldList;
- |$ D, b1 p2 U$ J6 K - }, b8 A% @: h' a: D
- public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) { m8 B- C" W. X/ r
- this.dynamicConFieldList = dynamicConFieldList;2 x0 ^# x* C9 B# H
- }
/ H! X0 A& {, ^% l! Y - public Integer getTopnum() {3 E, \2 _) Y, ]& D" `
- return topnum;0 o$ J! e2 T. [4 z4 c9 M
- }
% r ~/ g3 T7 p$ G( l. @; s - public void setTopnum(Integer topnum) {0 ^2 L% P, P% J1 g0 R# [8 Q! D
- this.topnum = topnum;
, K3 w+ u' e! i1 a2 {! B5 G+ V - }* a5 s. `9 X) b+ _. {3 O/ \
- public String getSortFlag() {
+ O# x F7 B* @0 _7 G& _ - return sortFlag;$ Y& y ]) D# y1 k
- }
3 x& N1 f; d4 w( @/ f - public void setSortFlag(String sortFlag) {
* h( t7 G9 E& b/ _5 S - this.sortFlag = sortFlag;- L5 D8 I% p; V k% n6 \
- }
4 i! M$ N# i D7 g - public String getRemark() {
# R( s4 [7 v$ z* E$ u1 N8 ?6 ] - return remark;
' `% Y$ C- w9 I/ C7 k$ y - }8 E9 I$ E0 B/ r$ I# O( {0 T
- public void setRemark(String remark) {+ l& W7 g8 ]) h* t0 M& z( `# u
- this.remark = remark;
6 o5 T2 w' j5 Q1 D( q6 _/ | N3 ~ - }5 f( v& L% B, B( E7 x
% N$ n+ R1 k2 ?' G-
, R0 f! y% P4 b6 K$ G; _' }# Z - public String getModelName() {
1 q' Y" B- T$ O( P5 c. z - return modelName;1 M8 V) Z/ ~1 k- M" s
- }
) S' U+ r" x* K2 b! `, b8 ^- K, @ - public void setModelName(String modelName) {+ E) u& }8 b. A9 Y# z
- this.modelName = modelName;+ t" n/ s/ V( d" U: w" @8 r
- }& J, k5 Y+ P" e+ y- R
- public List<ResultField> getResultField() {5 b- S) Y8 @9 ? C' R# M0 W4 M, |
- return resultField;0 Q+ `* S( a+ M. J- w( a
- }5 z; e( I- {6 X9 e C
- public void setResultField(List<ResultField> resultField) {0 ]- q5 P. `0 E* V: W2 w
- this.resultField = resultField;$ F! |, d4 k, L9 f( P: W
- }
6 p2 U2 u: K, U" M+ j' Y4 _" K - public String getFileName() {+ s) X R! x8 Z K. z/ J9 _
- return fileName;; v5 f8 v7 d. Z5 x j
- }
1 a( n3 a. c9 V0 m - public void setFileName(String fileName) {2 V" {2 Z% h: d- X; l$ N( i7 p) |! ]
- this.fileName = fileName;, i9 k {! |* a( _- m
- }
( B1 f, ]5 t2 O: `( W - 4 D7 r$ A+ f! F: Y3 {! ^6 Q
- }
复制代码 在转化的时候需要这样来写:. L1 X8 I: Z/ ^) H
- Map<String, Class> classMap = new HashMap<String, Class>();
, {1 s5 l4 W u7 u$ @! n - . ~) @$ R5 | f+ ^5 X
- classMap.put("regularCondtionList", Condition.class);' x1 h3 f1 u/ i+ B/ J9 O3 N( X
- 2 Y3 Q- G$ s! i. D4 V2 P
- classMap.put("dynamicConFieldList", ConditionField.class);, [# Q* |% W1 T! x) P1 \
# E3 }& e% p' \6 i- classMap.put("resultField", ResultField.class);- g4 E# A) l7 R& Q$ l: a' Y
" @9 |3 }% t' h" `2 g T- AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap);
复制代码 ' Z1 h+ `) D# l7 B6 Y$ p" f
* |( p% ]+ q% H0 V1 S) R9 X+ }" ~- ^
, H0 F* [6 P5 r4 {
1 i5 t7 Q, Q. N6 g3 C1 i. | |
|