TA的每日心情 衰 2021-2-2 11:21
签到天数: 36 天
[LV.5]常住居民I
在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等6 O& U$ F- ~7 e* h' n
但是如果存在List集合就会出新net.sf.ezmorph.bean.MorphDynaBean cannot be cast to 错误。6 G( ^9 [3 a7 S' U
解决方法:public class Student implements java.io.Serializable{0 [1 k% }1 Z( `$ s$ I# w6 b
% L9 O, K8 c+ E
/** ' N7 u5 I' H' t
* @Fields serialVersionUID : TODO! H+ W, b& N7 ], h( `1 W
*/ 0 n: F- e* b3 w- O9 M
private static final long serialVersionUID = -1943961352036134112L;
0 r7 k9 L. B* ~( v% c private String sname;6 f8 h, J, ?. Q$ F6 B
private Integer age;1 M6 |; r$ M2 D
public String getSname() {
2 s- R+ C: @# C, r! U2 N4 D return sname;) Y, L0 r/ z! N# `
}; q3 [& F0 n3 S+ g3 N+ Y% F
public void setSname(String sname) {0 @; b1 R( m: U1 N
this.sname = sname;
2 \9 O* y; P; e7 G3 J }4 G, Y; }$ a( L# w1 h B
public Integer getAge() {6 B$ c+ M, U$ f' a
return age;3 }' u3 Z" V- V9 K9 e+ `
}
: Y5 g- B4 S$ M! \5 D public void setAge(Integer age) {
5 J( L( f" c& d this.age = age;/ Y+ e: l0 i# Z( Z, H
}
& J2 ?4 r+ n+ g % ^" X4 O4 A9 S7 h
}
9 H1 T J% h4 u) g% O+ u/ A; o 复制代码 由字符串转java bean时可以使用以下方法:$ a s9 @( P4 x9 h9 x
" Y3 O( w% c2 f' M
JSONObject jobj = JSONObject.fromObject(str);: S3 Q1 I+ n! `% M7 }
Student s = (Student) JSONObject.tobean(jobj,Student.class); 复制代码 ( h) U( m% V, ?: J+ P) |
是没有问题的,但是如果属性中含有复杂的类型,当其中属性有类似List , Map ,ArrayList、自定义的类型,如List<Teacher> teachers, 就不可以了。 会报错:MorphDynaBean cannot be cast to con.test……
& L, ~# X8 Z7 h/ \% H3 y9 M 在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);
9 e" v6 a0 N, r3 |' e9 b' w% m. I : H( K6 Q7 e0 v N" e( }
比如我定义了如下类型:
& T9 B" h. ?1 G4 q0 H: i: ` import java.util.List;5 o2 A: q/ R2 X8 u# l, S
/**
6 l3 [* e8 l2 e$ k6 H: C! \$ D8 T *
/ R3 ~2 {, S9 Q2 E: k * <P>Tiltle: AnalysisModel.java </P>
; b* l$ O; x G% m; S * <P>Description:模型类 </P>$ Y M' C$ }% D% y* R5 [( E
* @author biyutong
+ ?% Y) o; y1 N; b# U$ ~ * @date Jun 11, 2012 9:37:54 AM # C- L/ L- n' O( k
* @version:V1.0) g$ P' a( p9 a$ e6 F- G+ B
*/9 }" _- j5 S1 {: C# c
public class AnalysisModel implements java.io.Serializable{7 J5 H5 U9 K% a# f
7 Z8 b1 _4 u, P5 l9 d /**
4 m: |. G7 k2 N! A6 p* b1 s * 固定条件; d0 ]8 l( F5 Q! c3 K! c
*/3 q6 m$ V" P7 l: Y6 g4 |* I
private List<Condition> regularCondtionList;//
& D. z; F& T% q6 x, Y /**
" d H: k2 i- g) B * 动态条件
7 {% S; M( X: b0 \& c, ?" E/ c */5 _- Z$ I; v1 @" B C* B
private List<ConditionField> dynamicConFieldList;
' d$ z0 D* {( P5 i) ^0 Z /**2 D# }* f3 p6 A9 L3 \" Z h4 u
* 结果9 U* K: ^. m( T6 J* F5 \$ h: S
*/
6 ?( i2 x, `) I) k private List<ResultField> resultField;
$ D2 h+ Y& O9 |2 ~; {* [ /**, \. ^% ^# B* u- N0 O+ j2 Y, I
* 获取前多少条数据
2 i+ G! {$ N/ v */) z8 J3 v0 K9 m7 _. t2 f
private Integer topnum;& i2 C8 M4 `- \ d( ~) j
/**
0 j0 U9 q; i" x- Q w$ }3 B9 e- O * 顺序还是随机8 A& s) W( |5 g J
*/2 ]. w0 Y8 m' `* J" x! U
private String sortFlag;, m/ ~4 T9 @: R$ L" w" \) @) ]
/**
/ h) y9 Y& R, z* { * 备注9 S+ p6 S! E$ X7 |
*/3 W% {4 p, `' h& T* R0 S9 N% [- f
private String remark; ^. c, R5 X8 y2 w" Q
/**
- o5 D0 p/ o: B+ `, X * 模型名称5 J5 E0 l$ R+ D& A Z- d4 Y
*/& x0 _8 d! W% e
private String modelName;
5 E, b; T( c3 Z /**0 D8 n- i e3 y. t# g
* 对应的xml文件名称
* e# r* L" A' s */2 W" U: L M4 E+ H) Q
private String fileName;; ?" e% ]+ D. h9 ?7 H
public List<Condition> getRegularCondtionList() {
) Y+ f% m7 r7 N$ |! s5 y# \ return regularCondtionList;
; ]- D! l! D( g- P7 m }
9 e! p3 R3 b3 y, z3 ]4 d public void setRegularCondtionList(List<Condition> regularCondtionList) {9 y; A& e; W0 X8 P* n* n
this.regularCondtionList = regularCondtionList;3 R8 V6 o7 k6 P; l' i0 D
}* V P2 \! r1 c* o
public List<ConditionField> getDynamicConFieldList() {
6 e3 t9 O& R9 A4 d7 i- o return dynamicConFieldList;
0 o1 f+ h# h& e( k) e6 T }8 z+ [1 j! T6 n5 Z) {& T! i. `/ F
public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) {# m% N! C3 M" V
this.dynamicConFieldList = dynamicConFieldList;# ^4 M' C7 Q) F9 O. n4 {( f
}
5 }1 w' J6 M. W. M$ J3 N _ public Integer getTopnum() {& d7 x; E# c9 j# r, b$ @3 G
return topnum;% t8 g; V9 s! ?# }: n O# c2 L4 I
}
, x! e2 O- X! I& N public void setTopnum(Integer topnum) {
$ N! ], R; W3 B& k1 c! _6 A: P this.topnum = topnum;
O k+ I9 \! ]( L9 ] N, z3 y }
: M( j( _( S3 Z$ V6 f4 W& F& V public String getSortFlag() {
. Z. D3 K* j+ e return sortFlag;
( i! n3 p8 V$ {, Y2 g# N }8 t9 X9 @5 R! T( P( Y
public void setSortFlag(String sortFlag) {
; I' S; O0 O, M& x- j this.sortFlag = sortFlag;0 @8 g+ G7 W, x' p! y; \
} v, W; h) X# P% B' O- @
public String getRemark() {, t+ s+ I5 ?0 c w' F+ w/ [8 o# Y
return remark;
( c! S `' y1 e" y/ B% | { }
; w% U% e4 f/ Y) _ public void setRemark(String remark) {, J. ]9 ]8 Z! _% _5 z9 ?
this.remark = remark;6 E! [6 m& E% A
}, s( ~3 z4 j8 S, G7 S: ~! ^
& A6 }5 ^4 ?1 M, E$ B# b
! \: t1 [. z! D F3 ?
public String getModelName() {2 x8 L7 a$ C, g( P( c. C; C
return modelName;" Y: C; g# G% n) w. g
}
8 _% G: f( q) W+ f8 ?0 a/ s public void setModelName(String modelName) {! y% y' f3 f4 q3 S$ v3 v( i
this.modelName = modelName;
A. z7 d# C/ @0 ?, T A }
: } N/ G$ [5 V* f- p- A public List<ResultField> getResultField() {
* X, w% i9 |- j% e) m) {2 u, z return resultField;: i2 }" x7 J3 N: M" [* R
}
7 {1 m0 E {* ~ ] public void setResultField(List<ResultField> resultField) {5 ^4 o+ ~) `1 a/ H, c5 X+ X
this.resultField = resultField;4 Y4 f" N- T7 {4 c
}
8 I6 Y( k3 G* t0 C) M5 w public String getFileName() {) ~3 Z$ ]. E' P' g+ \6 a! I4 H9 ^
return fileName;6 p! @9 z( c; r
}
E+ U( t, T3 H( S0 P* x6 m+ G public void setFileName(String fileName) {1 F! M4 d6 Q- I4 ?# w6 n3 S8 Q/ J1 c
this.fileName = fileName;
( d/ J5 q1 {2 w0 @! c6 n }5 n& \8 I9 k, S; U/ E0 T
, ~% T4 @8 P: Q$ R; Q: Q7 y# W6 m) j } 复制代码 在转化的时候需要这样来写:, O, B$ X, d% b1 S0 e# X
Map<String, Class> classMap = new HashMap<String, Class>();
/ b5 }, d- B: _; H: O 4 | [: K7 U1 L, ?
classMap.put("regularCondtionList", Condition.class);
/ R# O9 D+ o& @5 j" J 5 }+ d$ E% K- h# J
classMap.put("dynamicConFieldList", ConditionField.class);3 p+ C5 _0 E0 Q+ e$ Y T& l) w
4 P9 ]8 j! ?4 ?# S8 ^ classMap.put("resultField", ResultField.class);3 ^% [6 b7 H. x7 x8 M, _
7 l& }/ y) e8 l2 L% p3 s$ T, j
AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap); 复制代码 & s7 t) M3 m# H' L" {" A" q1 ?& t: G
3 ~* I0 z- l+ @2 S0 @3 R3 {2 k$ B ! i7 o# ` H9 O( \' r
. r' S* O+ R- P f: J- S4 s! ^/ A
5 f# d k" x+ o
科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关2、本站所有主题由该帖子作者发表,该帖子作者与科帮网 享有帖子相关版权3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网 的同意4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意7、科帮网 管理员和版主有权不事先通知发贴者而删除本文
JAVA爱好者①群:
JAVA爱好者②群:
JAVA爱好者③ :