java对象转JSON时的常用注解
- @JsonIgnore : 排除属性
- 带有此注解的属性不会被解析
- 有的时候我们就是希望解析Java对象为JSON的时候要忽略某些属性, 那么这个时候我们就给这些想要忽略的属性加上@JsonIgnore注解之后再去解析
- @JsonFormat : 属性值的格式化
- 一般都是配置到Date等类型的属性上 , 因为java对象中Date类型的属性我们默认是转换为JSON格式的时候对应Date类型的属性值是一个毫秒值(时间戳), 但是我们可以使用此注解就可以设置转换为JSON格式的时候对应属性值的解析格式
代码举例:
我们给出Person类(JavaBean)
我们最终会将Person类的对象转换为JSON数据格式, 其中的birthday属性类型是Date(java.util.date)
package com.ffyc.domain;
import java.util.Date;
//类是公共的
public class Person {
private String name;
private int age;
private String gender;
private Date birthday;
//公共的无参构造方法
public Person(){
}
//提供get()和set()
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 getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
然后我们给出将Person对象转换为JSON数据格式的代码:
public class JacksonTest{
//java对象转为JSON对象
@Test
public void test(){
//1. 创建person对象
person p = new Person();
p.setName("张三");
p.setAge(23);
p.setGender("男");
p.setBirthday(new Date());
//2. jackson的核心对象ObjectMapping
ObjectMapper mapper = new ObjectMapper();
//3. 转换
String json = mapper.writeValueAsString(p);
System.out.println(json);
//下面就是分别调用三种writeValue()的重载方法
mapper.writeValue(new File("d://a.txt"),p);
mapper.writeValue(new FileWriter("d://b.txt"),p);
mapper.writeValue(new FileInputStream("d://c.txt"),p);
//调用了这三种方法之后我们可以发现在d盘中就会分别出现a.txt和b.txt和c.txt文件, 其中就是保存的转换之后的json数据
}
}
- 这个时候我们可以发现我们获取的JSON数据中的birthday键后面是一个时间戳
这个时候为了让birthday键后面是一个xxxx-xx-xx格式的数据, 这个时候我们就要使用JsonFormat标签来解决
package com.ffyc.domain;
import java.util.Date;
//类是公共的
public class Person {
private String name;
private int age;
private String gender;
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birthday;
//公共的无参构造方法
public Person(){
}
//提供get()和set()
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 getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
- 这类我们就使用了Json-Format注解, 注解中要传入一个参数, 传输的参数是String类型的, 就是传入一个格式: 传入的这个格式就和我们在学习时间日期解析类的时候创建SimpleDateFormat类的时候传入到构造器中的格式是一样的, y表示的是年 , M表示的是月 , d表示的是日期, h表示的时间, m表示的是分钟, s表示的是秒
- 然后解析这个Person对象之后就发现解析出来的birthday键对应的值是一个年-月-日的格式, 因为我们上面的注解声明为了: Json-Format(“yyyy-MM-dd”)