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]