jackson有很多注解可以使用在model类中, 现在对常用的几个类进行demo
首先实体类长这样
package models;
import java.io.Serializable;
import java.util.Date;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.annotate.JsonDeserialize;
import org.codehaus.jackson.map.annotate.JsonFilter;
import org.codehaus.jackson.map.annotate.JsonSerialize;
public class Person implements Serializable{
private static final long serialVersionUID = 1309671150281709698L;
private String name;
private Integer age;
private String addr;
private Date birthday;
public Person(String name, Integer age, String addr, Date birthday) {
super();
this.name = name;
this.age = age;
this.addr = addr;
this.birthday = birthday;
}
public Person(String name, Integer age, String addr) {
super();
this.name = name;
this.age = age;
this.addr = addr;
}
public Person() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", addr=" + addr
+ ", birthday=" + birthday + "]";
}
}
然后是test
package commonsTest;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import models.Person;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig.Feature;
import org.junit.Test;
public class Demo4 {
@Test
public void test1() throws Exception{
Person p = new Person("张三",23,"北京",new Date());
System.out.println(p);
ObjectMapper mapper = new ObjectMapper();
//转json格式 序列化
String string = mapper.writeValueAsString(p);
System.out.println(string);
//转对象 反序列化
String content = "{\"name\":\"张三\",\"age\":23,\"addr\":\"北京\",\"birthday\":1515982432050}";
Person readValue = mapper.readValue(content, Person.class);
System.out.println(readValue);
}
}
输出的结果
Person [name=张三, age=23, addr=北京, birthday=Mon Jan 15 10:13:52 CST 2018]
{"name":"张三","age":23,"addr":"北京","birthday":1515982432050}
Person [name=张三, age=23, addr=北京, birthday=Mon Jan 15 10:13:52 CST 2018]
下面介绍@JsonIgnore注解, 使用它可以对model中的属性进行忽略
private String name;
private Integer age;
private String addr;
@JsonIgnore
private Date birthday;
此时test1 的输出结果
Person [name=张三, age=23, addr=北京, birthday=Mon Jan 15 10:17:34 CST 2018]
{"name":"张三","age":23,"addr":"北京"}
Person [name=张三, age=23, addr=北京, birthday=null]
birthday属性被忽略了, 注意@JsonIgnore注解作用是双向的
下面介绍@JsonSerialize和@JsonDeserialize注解,使用它们可以在序列化和反序列化时对属性值进行特定的操作
首先写一个序列化类继承JsonSerializer类
package models;
import java.io.IOException;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
public class TimeToJson extends JsonSerializer<Date>{
@Override
public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = formatter.format(value);
jgen.writeString(formattedDate);
}
}
再写一个反序列化的类,继承JsonDeserializer
package models;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonParser.Feature;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.DeserializationContext;
import org.codehaus.jackson.map.JsonDeserializer;
public class JsonToTime extends JsonDeserializer<Date>{
@Override
public Date deserialize(JsonParser arg0, DeserializationContext arg1)
throws IOException, JsonProcessingException {
String timeText=arg0.getText();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
System.out.println(timeText);
Date date = null;
try {
date = formatter.parse(timeText);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
然后对Person类进行改造
package models;
import java.io.Serializable;
import java.util.Date;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.annotate.JsonDeserialize;
import org.codehaus.jackson.map.annotate.JsonFilter;
import org.codehaus.jackson.map.annotate.JsonSerialize;
public class Person implements Serializable{
private static final long serialVersionUID = 1309671150281709698L;
private String name;
private Integer age;
private String addr;
@JsonSerialize(using = TimeToJson.class)
@JsonDeserialize(using = JsonToTime.class)
private Date birthday;
public Person(String name, Integer age, String addr, Date birthday) {
super();
this.name = name;
this.age = age;
this.addr = addr;
this.birthday = birthday;
}
public Person(String name, Integer age, String addr) {
super();
this.name = name;
this.age = age;
this.addr = addr;
}
public Person() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", addr=" + addr
+ ", birthday=" + birthday + "]";
}
}
此时的test
@Test
public void test2() throws Exception{
Person p = new Person("张三",23,"北京",new Date());
System.out.println(p);
ObjectMapper mapper = new ObjectMapper();
//转json格式 序列化
String string = mapper.writeValueAsString(p);
System.out.println(string);
//转对象 反序列化
String content = "{\"name\":\"张三\",\"age\":23,\"addr\":\"北京\",\"birthday\":20180115102015}";
Person readValue = mapper.readValue(content, Person.class);
System.out.println(readValue);
}
输出结果
@Test
public void test2() throws Exception{
Person p = new Person("张三",23,"北京",new Date());
System.out.println(p);
ObjectMapper mapper = new ObjectMapper();
//转json格式 序列化
String string = mapper.writeValueAsString(p);
System.out.println(string);
//转对象 反序列化
String content = "{\"name\":\"张三\",\"age\":23,\"addr\":\"北京\",\"birthday\":20180115102015}";
Person readValue = mapper.readValue(content, Person.class);
System.out.println(readValue);
}