下面根据官网的 Annotation 文档 对常用的 annotation 进行下讲解。
完全版的 annotation 见如下页面:
https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>JacksonTest</groupId>
<artifactId>JacksonTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jackson</name>
<properties>
<jackson.version>2.8.4</jackson.version>
</properties>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<!-- Note: core-annotations version x.y.0 is generally compatible with
(identical to) version x.y.1, x.y.2, etc. -->
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
常用的如下:
1.序列化阶段/反序列化阶段 不同名称相互之间的映射
2.序列化阶段 字段忽略, 指定的字段不进行序列化
3.反序列阶段 字段忽略, 忽略不存在的字段
1.序列化阶段/反序列化阶段 不同名称相互之间的映射
示例:
利用@JsonProoerty
package annotation;
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
class Test{
String _name;
@JsonProperty("age")
int age;
String address = "dalian";
@JsonProperty("_name")
public String get_name() {
return _name;
}
@JsonProperty("name")
public void set_name(String _name) {
this._name = _name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "_name:"+this._name+"\n"+
"age:"+this.age+"\n"+
"address:"+this.address+"\n";
}
}
public class SerializeOne {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES,true);
Test test = mapper.readValue("{'name':'hehe','age':12}", Test.class);
System.out.println(test);
String json = mapper.writeValueAsString(test);
System.out.println(json);
}
}
输出:
2.序列化阶段 字段忽略, 指定的字段不进行序列化
利用@JsonIgnoreProperties
package annotation;
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@JsonIgnoreProperties({"age","_name"})
class TestTwo{
String _name;
@JsonProperty("age")
int age;
String address = "dalian";
@JsonProperty("_name")
public String get_name() {
return _name;
}
@JsonProperty("name")
public void set_name(String _name) {
this._name = _name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "_name:"+this._name+"\n"+
"age:"+this.age+"\n"+
"address:"+this.address+"\n";
}
}
public class SerializeIgnore {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES,true);
TestTwo test = mapper.readValue("{'name':'hehe','age':12}", TestTwo.class);
String json = mapper.writeValueAsString(test);
System.out.println(json);
}
}
输出
3.反序列阶段 字段忽略, 忽略不存在的字段
@JsonIgnoreProperties(ignoreUnknown=true) //对于在pojo中不存在的属性,反序列化也不会报错
@JsonIgnore
示例:
package annotation;
import java.io.IOException;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@JsonIgnoreProperties(ignoreUnknown=true)
class TestTwo{
String _name;
@JsonIgnore
int age;
String address = "dalian";
@JsonProperty("_name")
public String get_name() {
return _name;
}
@JsonProperty("name")
public void set_name(String _name) {
this._name = _name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "_name:"+this._name+"\n"+
"age:"+this.age+"\n"+
"address:"+this.address+"\n";
}
}
public class SerializeIgnore {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES,true);
TestTwo test = mapper.readValue("{'name':'hehe','age':12,'invalid':'ss'}", TestTwo.class);
String json = mapper.writeValueAsString(test);
System.out.println(json);
}
}
效果: