java对象转JSON时的常用注解

  1. @JsonIgnore : 排除属性
  • 带有此注解的属性不会被解析
  • 有的时候我们就是希望解析Java对象为JSON的时候要忽略某些属性, 那么这个时候我们就给这些想要忽略的属性加上@JsonIgnore注解之后再去解析
  1. @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”)