您的位置:首页 > Web前端 > JavaScript

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  fastjson JSONField