大家好,又见面了,我是你们的朋友全栈君。
查看@JSONField注解的源码可以了解到它的作用范围是在方法(METHOD)、属性(FIELD)、方法中的参数(PARAMETER)上。
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;
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127886.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...