fastjson @JSONField
2018-08-24 17:16
369 查看
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() {
&n
1c7c
bsp; // 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;
注意: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() {
&n
1c7c
bsp; // 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;
相关文章推荐
- fastjson使用@JSONField、@JSONType、SerializeFilter定制序列化
- fastjson之annotation.JSONField
- fastjson @JSONField自定义输出字段
- Fastjon JSONField 注解 常见用法
- 关于fastjson的@JSONField注解的一些问题(详解)
- fastjson:javabean按字段(field)序列化存储为Map并反序列化
- fastjson的@JSONField注解的一点问题
- fastjson:javabean按字段(field)序列化存储为Map并反序列化改进
- fastjson @JSONField自定义输出字段
- FastJson中@JSONField注解使用
- fastjson使用 -- @JSONField使用
- FastJson中@JSONField注解使用
- 关于FastJSON的@JSONField属性,怎么判null空处理,serialzeFeatures属性
- fastjson的@JSONField注解
- FastJson中@JSONField注解使用
- FastJsonHttpMessageConverter设置dateFormat后导致JSONField注解format失效解决办法
- 关于fastJSON的@JSONField
- FastJson中@JSONField注解使用
- fastjson使用(五) -- @JSONField使用
- 用fastjson为Ztree生成多级树形菜单JSON数据源