TA的每日心情 | 衰 2021-2-2 11:21 |
|---|
签到天数: 36 天 [LV.5]常住居民I
|
在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等; x" ]0 [: {% M8 x8 Q3 o
但是如果存在List集合就会出新net.sf.ezmorph.bean.MorphDynaBean cannot be cast to 错误。
* w# g/ u+ _- Y, x$ d解决方法:- public class Student implements java.io.Serializable{
! G- h2 \9 f( K+ U+ |9 A! h - - K' l* d; Y' L+ F$ X B
- /** : H0 g: b: q' A! E% _6 o7 v
- * @Fields serialVersionUID : TODO* y3 D9 [ d0 t& ~/ g! c( o
- */ ' N# h$ |) v% O+ w1 v; O5 U$ i
- private static final long serialVersionUID = -1943961352036134112L;
$ a9 M2 s* I [. G* T - private String sname;
% t, Y* K% l' X - private Integer age;
0 N2 y5 O+ B+ f6 [7 z K/ S - public String getSname() {
# P6 d0 f/ Q; e& A" x, l - return sname;3 T' R. u- u: X
- }
( l! M h( c ~1 x, G7 A: c) W) Y - public void setSname(String sname) {
, e3 [( X+ B3 d9 d/ k* k/ m - this.sname = sname;. A! X: E# A# ?# i2 Y. V6 P
- }+ ]0 M2 C$ u* B9 U7 r
- public Integer getAge() {' u+ [. \3 X, f8 J3 l
- return age; M8 P4 M2 J) @ ~- A, `% b
- }( R' E2 s9 |& ^" u- T6 [
- public void setAge(Integer age) {
& u2 b2 P* \$ Y; |% Q- d - this.age = age;( [5 H* S! U" F7 D( i6 y& b: e4 A! v" x
- }$ J, T0 s. d6 C8 x" U6 j) \
-
5 s" |+ C! D: |/ H - }
) |2 ~5 b) D' I* S
复制代码 由字符串转java bean时可以使用以下方法:
3 {$ l/ x0 U: a" C8 N9 e" V/ @7 F/ @' @/ {3 H
- JSONObject jobj = JSONObject.fromObject(str); P9 I n7 ^8 t- y9 u% Y( M
- Student s = (Student) JSONObject.tobean(jobj,Student.class);
复制代码
$ n& L* d0 {# v是没有问题的,但是如果属性中含有复杂的类型,当其中属性有类似List , Map ,ArrayList、自定义的类型,如List<Teacher> teachers, 就不可以了。 会报错:MorphDynaBean cannot be cast to con.test……
! n5 O' P7 r0 H4 Y! K# p& 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);
% |; U( [- Y" s; f/ x& G5 G% L6 G" C3 c: Q; ^) W
比如我定义了如下类型:) X+ h6 \& v# y" f6 Z& J
- import java.util.List;! l! ?! V6 F5 K
- /**1 }( j+ N4 I r. t( c# p; M
- * 3 C/ w6 h( o8 I" t i, F# o8 b
- * <P>Tiltle: AnalysisModel.java </P>$ b0 b4 _1 z0 R R( u: [0 ^
- * <P>Description:模型类 </P>
: h! u- w- y- i/ @0 J$ B( M - * @author biyutong
, P$ a U2 O* _5 p - * @date Jun 11, 2012 9:37:54 AM / J1 a) C( j- `- X
- * @version:V1.0 ~ \; C+ w" K3 n) [6 R
- */
N; {9 t* P/ ?+ U6 h. |; S6 b0 N! ^ - public class AnalysisModel implements java.io.Serializable{' j1 _! ~7 }5 q+ }) `- |" D/ i
- , a- ]6 z' e- [; N/ l" u, F7 z
- /*** `' N, H' p6 P a# w/ [; y# Z
- * 固定条件3 F: S5 J. O/ h- Q
- *// C4 L6 {% ?7 t3 R8 d
- private List<Condition> regularCondtionList;//1 M# W3 Z5 b/ \, A V
- /**
! R+ ?7 N# }. j - * 动态条件9 D% G8 h* L/ C3 c$ j) v4 G
- */( H+ P$ _) {$ E5 c" B" ], ?
- private List<ConditionField> dynamicConFieldList;
2 b! \, ?( g, V" | - /**
: X. N2 c1 r* C& W - * 结果
! _: `8 `. g) A& G& ?: w4 S$ x - */2 A5 _, D9 H: o9 D1 c' I' p
- private List<ResultField> resultField;
7 X# H! R; U. l/ j - /**
8 \$ x* v; E; Y$ u% R2 B - * 获取前多少条数据7 u* z9 C' ]) A1 O2 n
- */2 q; I" E4 p! z/ w: |
- private Integer topnum;5 o* K+ D( z1 u
- /**3 C# G' p4 i. [$ X: L
- * 顺序还是随机" Q& O$ [6 Z) L9 i3 W; k, y
- */
' z* d0 \) K+ k2 N0 r - private String sortFlag;
6 V6 V+ R1 t6 V0 {0 p( y7 S T* D' P - /**8 F$ e$ Q" ?" Y: ^
- * 备注
- U1 O0 ~5 J% |5 J - */
/ L/ u& i5 K; j. q- C6 o/ x - private String remark;+ L. K( A: j% [
- /**
1 v1 O$ V) W' \+ Y - * 模型名称
' D# M$ Z7 i" }9 | - */
7 Y4 f" ` o6 ~4 M - private String modelName;7 l) o# S, G6 X# Z* _
- /**
/ J5 l6 D2 G% j2 {% }8 T7 B - * 对应的xml文件名称
. L I" \8 ~3 I+ |* O - */% _8 @' w9 j* p! B
- private String fileName;
# R0 t( V9 u1 P& U& D+ o: k - public List<Condition> getRegularCondtionList() {0 |$ f) k/ W' z% ?! @
- return regularCondtionList;& J! ~$ `% |# H9 y
- }
! k, E! ]8 N6 `7 P7 d4 H' }2 i4 F - public void setRegularCondtionList(List<Condition> regularCondtionList) {! W; A; ^, W- D6 j$ ` v% p
- this.regularCondtionList = regularCondtionList;: c- f+ Y# j3 ?- Q
- }) `$ Q. k; i5 D; f" C9 z# B7 s
- public List<ConditionField> getDynamicConFieldList() {
+ e$ N. q0 D; z5 W6 H; C( ^( @& o$ S - return dynamicConFieldList;
# h: N; N% \ g+ L - }
* z% ^# ?5 T9 O9 J- k# Q - public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) {
2 w0 b$ D; k; H/ L7 O7 J k - this.dynamicConFieldList = dynamicConFieldList;
; Q3 Y; u$ V! K - }8 s8 t3 q ]+ Y' h
- public Integer getTopnum() {# D4 u( _6 f0 ~; ^0 ?7 [
- return topnum;' E; R8 J$ ^9 ]3 J
- }( E/ \$ f' Z$ Q
- public void setTopnum(Integer topnum) {2 b3 C* x4 A+ q
- this.topnum = topnum;+ a# _& Z" A* o5 i1 C
- }
/ K5 E: {8 j+ r6 y" ^4 Y3 }* n7 L - public String getSortFlag() {+ T. o7 B Z4 @! D2 k. U
- return sortFlag;+ h) W1 w; e! R, l2 h9 x+ {. V
- }
" D" G6 ]3 R# d6 N7 o - public void setSortFlag(String sortFlag) {
4 M& j4 ]8 ~( S3 R5 N6 q. K - this.sortFlag = sortFlag;4 a( J% L* L7 G
- }% ?6 b' m2 f( N, t
- public String getRemark() {
6 F0 |: |8 P* l/ \+ W8 z - return remark;
' s3 `( _$ H( {/ C) _0 C/ a( Y z - }
0 b% j9 q5 r6 x/ I4 U" n: s* a - public void setRemark(String remark) { p. A* J) {! X9 |, _* a3 E
- this.remark = remark;* M) |, w, I" k0 \
- }
! X ?" n* e' _ - ' _- x/ Q8 E5 t: Y! y+ I& ^
-
$ e9 h) I k3 _% { - public String getModelName() {8 f' J: n) }4 g
- return modelName;- E* x' e! l4 N; \ A+ y
- }! w4 U; {, A' x& F! v O
- public void setModelName(String modelName) {
/ r1 k. j. O$ f9 p& R - this.modelName = modelName;" z; T$ h) _" d7 l; D( T t9 w
- }
, }7 L( x3 T- }' b& o+ h - public List<ResultField> getResultField() {2 H5 j+ `" d c" e: o- Y0 T
- return resultField;
" U+ }/ `9 j) a - }& \2 C" e6 ^% r# Z% a
- public void setResultField(List<ResultField> resultField) {8 z. A$ n: e0 l2 H/ e
- this.resultField = resultField;# u U6 I% a7 l& {) s- ~$ b
- }/ ?* |9 c( c2 @6 K5 L& Y) t
- public String getFileName() {
; L! J. I5 q" S" { - return fileName;
$ a/ e3 x6 S. H* k' g - }1 N% o& E2 |6 f5 d
- public void setFileName(String fileName) {2 _3 b1 r2 Y4 u1 [
- this.fileName = fileName;1 A5 E7 ?: S4 o( W% R
- }& }* \4 D% k$ s
- - G- M8 ^0 w/ y1 q: k
- }
复制代码 在转化的时候需要这样来写:/ x: i; V( n9 P% l: g
- Map<String, Class> classMap = new HashMap<String, Class>();" [! d' {6 d, w% D# O( l( i4 h
- * ^. U. D5 Q( A' G5 {' J" t9 Z
- classMap.put("regularCondtionList", Condition.class);' F3 s/ G/ v3 [* R8 z' t. ^% N
- 7 T- L0 p5 z7 w- i
- classMap.put("dynamicConFieldList", ConditionField.class);
7 ~$ C4 t/ ~6 C" O
1 Q; b- b) ~1 i! x) g# ^2 Q- classMap.put("resultField", ResultField.class);
% E$ ~! k5 Z1 A s
: A# f! C& {: X f5 N& I0 f- AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap);
复制代码 ' I) k+ [. s" T5 K
# C3 W! q/ k2 w5 A" ~' L( v/ }: J
2 v' c# J8 |" P3 |" U3 O8 `& ]( r8 m" I
4 Q9 ~7 P( u( Z |
|