springboot 底層 JackSon 的使用


Jackson常用的注解使用和使用場景:

接下來我們在看一段代碼,這段代碼是常用注解在實體類User中的簡單使用:
package zone.reborn.springbootstudy.entity;

import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;

/**
 * @author 作者: reborn
 * @version 創建時間: 2018年7月15日 下午3:59:45
 * @description 類說明:用戶實體類
 */
public class User {

    private String name;

    @JsonIgnore // 利用底層jackson注解
    private String password;

    private Integer age;

    @JsonFormat(pattern = "yy-MM-dd HH:mm:ss a", locale = "zh", timezone = "GMT+8")//yy-MM-dd HH:mm:ss
    private Date birthday;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String desc;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

}
單獨拿出來,聊聊:

 @JsonIgnore      忽略此屬性,比如password我並不想返回給前端,就可以添加此注解
@JsonFormat(pattern = "yy-MM-dd HH:mm:ss a", locale = "zh", timezone = "GMT+8")     進行數據格式化
@JsonInclude(JsonInclude.Include.NON_NULL)    如果此字段為null不返回該字段數據。
@JsonProperty(value = "user_name")      指定序列化時的字段名,默認使用屬性名
@JsonUnwrapped(prefix = "user_")    
把成員對象中的屬性提升到其容器類,並添加給定的前綴,比如上例中: User類中有name和age兩個屬性,不使用此注解則序列化為:

... "user": { "name": "xxx", "age": 22 } ...

使用此注解則序列化為:

... "user_name": "xxx", "user_age": 22, ..

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "id")    作用於類或屬性上,被用來在序列化/反序列化時為該對象或字段添加一個對象識別碼,通常是用來解決循環嵌套的問

Jackson在java代碼的使用場景:

@PostMapping("/jackson")
@ResponseBody
public Object jackson() {
User user = new User();
user.setName("小明");
user.setEmail("xiaoming@qq.com");
user.setAge(20);
ObjectMapper objectMapper = new ObjectMapper();
// 將對象轉換成json格式 格式化時間類型數據
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
//對象轉json
String json = objectMapper.writeValueAsString(user);
System.out.println(json);
// 將json格式轉換成對象

User user2 = objectMapper.readValue(json, User.class);
System.out.println(user2.toString());

// 將集合轉換成json
List<User> list = new ArrayList<User>();
list.add(user);
String jsonString = objectMapper.writeValueAsString(list);
System.out.println(jsonString);
// json轉換成集成對象
objectMapper.writeValue(new File("E:/lib/jackjson/jackjsonTest.txt"), jsonString);

User user3 = new Lisi();
user3.setAge(30);
user3.setBirthday(new Date());
user3.setEmail("11@22.com");
user3.setName("lisi");
System.out.println(objectMapper.writeValueAsString(user3));
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM