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));
}
