Jackson數據綁定泛型

在簡單的數據綁定中,我們使用String作爲關鍵對象,並作爲一個值對象映射類。相反,我們可以使用具體的Java對象和類型強制轉換到JSON使用。

考慮下面的例子使用一個類的UserData來保存用戶專用數據。

創建一個名爲JacksonTester在Java類文件目錄 C:\>Jackson_WORKSPACE.

文件名: JacksonTester.java

import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; public class JacksonTester { public static void main(String args[]){ JacksonTester tester = new JacksonTester(); try { ObjectMapper mapper = new ObjectMapper(); Map

userDataMap
=

new

HashMap

();

UserData
studentData
=

new

UserData
();

int
[]
marks
=

{
1
,
2
,
3
};

Student
student
=

new

Student
();
student
.
setAge
(
10
);
student
.
setName
(
"Mahesh"
);

// JAVA Object
studentData
.
setStudent
(
student
);

// JAVA String
studentData
.
setName
(
"Mahesh Kumar"
);

// JAVA Boolean
studentData
.
setVerified
(
Boolean
.
FALSE
);

// Array
studentData
.
setMarks
(
marks
);

TypeReference

ref

=

new

TypeReference

\>()

{

};
 userDataMap
.
put
(
"studentData1"
,
 studentData
);
 mapper
.
writeValue
(
new

File
(
"student.json"
),
 userDataMap
);

//{

// "studentData1":

// {

// "student":

// {

// "name":"Mahesh",

// "age":10

// },

// "name":"Mahesh Kumar",

// "verified":false,

// "marks":\[1,2,3\]

// }

//}
userDataMap 
\=
 mapper
.
readValue
(
new

File
(
"student.json"
),

ref
);

System
.
out
.
println
(
userDataMap
.
get
(
"studentData1"
).
getStudent
());

System
.
out
.
println
(
userDataMap
.
get
(
"studentData1"
).
getName
());

System
.
out
.
println
(
userDataMap
.
get
(
"studentData1"
).
getVerified
());

System
.
out
.
println
(
Arrays
.
toString
(
userDataMap
.
get
(
"studentData1"
).
getMarks
()));

}

catch

(
JsonParseException
 e
)

{
 e
.
printStackTrace
();

}

catch

(
JsonMappingException
 e
)

{
 e
.
printStackTrace
();

}

catch

(
IOException
 e
)

{
 e
.
printStackTrace
();

}

}

}

class

Student

{

private

String
 name
;

private

int
 age
;

public

Student
(){}

public

String
 getName
()

{

return
 name
;

}

public

void
 setName
(
String
 name
)

{

this
.
name 
\=
 name
;

}

public

int
 getAge
()

{

return
 age
;

}

public

void
 setAge
(
int
 age
)

{

this
.
age 
\=
 age
;

}

public

String
 toString
(){

return

"Student \[ name: "
+
name
+
", age: "
+
 age
+

" \]"
;

}

}

class

UserData

{

private

Student
 student
;

private

String
 name
;

private

Boolean
 verified
;

private

int
\[\]
 marks
;

public

UserData
(){}

public

Student
 getStudent
()

{

return
 student
;

}

public

void
 setStudent
(
Student
 student
)

{

this
.
student 
\=
 student
;

}

public

String
 getName
()

{

return
 name
;

}

public

void
 setName
(
String
 name
)

{

this
.
name 
\=
 name
;

}

public

Boolean
 getVerified
()

{

return
 verified
;

}

public

void
 setVerified
(
Boolean
 verified
)

{

this
.
verified 
\=
 verified
;

}

public

int
\[\]
 getMarks
()

{

return
 marks
;

}

public

void
 setMarks
(
int
\[\]
 marks
)

{

this
.
marks 
\=
 marks
;

}

}

驗證輸出

使用javac編譯如下類:

C:\Jackson_WORKSPACE>javac JacksonTester.java

現在運行jacksonTester看到的結果:

C:\Jackson_WORKSPACE>java JacksonTester

驗證輸出

Student [ name: Mahesh, age: 10 ]
Mahesh Kumar
false
[1, 2, 3]