fastjson @JSONField

此文来源于: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;
原文地址:https://www.cnblogs.com/JonaLin/p/11151870.html