此文來源於:https://blog.51cto.com/xiaok007/2164029
1.作用在FIELD(成員變量上)
注意:1、若屬性是私有的,必須有set*方法。否則無法反序列化。
package com.zhujie;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
public class User {
@JSONField(name="new_username")
private String username;
@JSONField(name="new_password")
private String password;
...
@Override
public String toString() {
// TODO Auto-generated method stub
return JSONObject.toJSONString(this);
}
public static void main(String[] args) {
User user = new User();
user.setUsername("lili");
user.setPassword("123456");
String jsonStr = JSONObject.toJSONString(user);
System.out.println("bean to json:"+jsonStr);
User user1 = JSONObject.toJavaObject(JSONObject.parseObject(jsonStr), User.class);
System.out.println("json to bean:"+user1.toString());
}
}
輸出結果是:
bean to json:{"new_password":"123456","new_username":"lili"}
json to bean:{"new_password":"123456","new_username":"lili"}
通過上面的例子可以看出@JSONField注解可以改變序列化和反序列化字段的名稱。
2.注解作用在set、get方法之上
@JSONField(name="new_username")
public String getUsername() {
return username;
}
@JSONField(name="new_username")
public void setUsername(String username) {
this.username = username;
}
注解作用在方法之上序列化和反序列化生成的對象的字段名稱都是new_username,可以改變字段的名稱,跟上面直接注解到屬性上是一樣的效果。
3.注解中的serialize、deserialize用法
翻看源碼可以看到serialize、deserialize的默認值都是true,也就是說默認情況下(即使不設置serialize、deserialize屬性)是允許對象序列化和反序列化的。
@JSONField(name="new_password", serialize=false, deserialize=false)
private String password;
4.注解中的format用法
源碼中format屬性的默認值是“”空字符串,我所了解到的是用在日期屬性上的格式化,如果有其它的用法可以相互交流學習。
@JSONField(format="yyyy-MM-dd HH:mm:ss")
private Date currentDate;
5.注解中的serialzeFeatures、parseFeatures屬性可以控制序列化的一些規則。
通常情況下如果一個 字段的屬性值為null時序列化或者反序列化的時候是不會將該字段輸出的;
那么我們有沒有辦法來控制呢?
答案是可以的;
我們可以通過serialzeFeatures、parseFeatures的屬性值SerializerFeature.WriteMapNullValue來控制,當屬性的值為null時也輸出該字段,字段的值為null。
@JSONField(format="yyyy-MM-dd HH:mm:ss", serialzeFeatures=SerializerFeature.WriteMapNullValue)
private Date currentDate;
當然SerializerFeature類中還有很多其他的屬性,我會在接下來的章節中講解。
6.使用ordinal指定字段順序
缺省fastjson序列化一個java bean,是根據fieldName的字母序進行序列化的,你可以通過ordinal指定字段的順序。這個特性需要1.1.42以上版本。
@JSONField(ordinal =2)
private String username;
@JSONField(ordinal =3)
private String password;
@JSONField(ordinal =1)
private Date currentDate;