@JsonIgnore
注解用在属性上,当JSON序列化和反序列化时忽略该属性。
@JsonFormat
注解用在属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”)。
@JsonAlias("name")
注解用在属性上,只在反序列化时生效。
@JsonProperty
注解用在属性上,作用是把该属性的名称序列化为另外一个名称,如把fullName属性序列化为name,@JsonProperty(“name”)。当序列化和反序列化名称不相同时,可以在对应的get方法上加@JsonProperty(“fullName”)和set方法上加@JsonAlias(“NaMe”)注解。set方法在反序列化时被调用,get方法在序列化时被调用。
@JsonIgnoreProperties(ignoreUnknown = true)
该注解用在类上,代表进行反序列化时如果类中没有对应的属性,可以忽略,也可以写成@JsonIgnoreProperties({ "createTime", "updateTime" })
指定的字段不序列化和反序列化。
2.1. 常用方法
// 2.1.1 序列化常用方法
writeValue(File arg0, Object arg1) 把arg1转成json序列,并保存到arg0文件中。
writeValue(OutputStream arg0, Object arg1) 把arg1转成json序列,并保存到arg0输出流中。
writeValueAsBytes(Object arg0) 把arg0转成json序列,并把结果输出成字节数组。
writeValueAsString(Object arg0) 把arg0转成json序列,并把结果输出成字符串。
// 2.1.2 反序列化常用方法
readValue(URL src, Class<T> valueType) 从给定资源反序列化为给定Java对象。
readValue(String content, Class<T> valueType) 从给定的JSON内容字符串反序列化Java对象。
readValue(File src, Class<T> valueType) 从给定的文件反序列化为Java对象。
readValue(InputStream src, Class<T> valueType) 从给定的字节输入流反序列化为Java对象。
readValue(Reader src, Class<T> valueType) 从给定的字符流反序列化为Java对象。
2.2 实例
// 基本对象
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public static class User {
@JsonProperty(value = "NaMe")
private String name;
private int age;
@JsonAlias("home-address")
private String address;
@JsonIgnore
private Date createTime;
}
public static void main(String[] args) throws IOException {
// 原始字符串
String a = "{\"NaMe\":\"hello\", \"age\":2, \"home-address\":\"chengdu\"}";
ObjectMapper objectMapper = new ObjectMapper();
// 反序列化(JSON字符串转对象)
User label = objectMapper.readValue(a, User.class);
// 以下结果输出:User(name=hello, age=2, address=chengdu, createTime=null)
System.out.println(label);
// 对象序列化(对象转为JSON字符串)
final String string = objectMapper.writeValueAsString(label);
// 以下结果输出:{"age":2,"address":"chengdu","NaMe":"hello"}
System.out.println(string);
}