fastjson 注解(JAVA注解)

查看@JSONField注解的源码可以了解到它的作用范围是在方法(METHOD)、属性(FIELD)、方法中的参数(PARAMETER)上。1.作用在FIELD(成员变量上)注意:1、若属性是私有的,必须有set*方法。否则无法反序列化。packagecom.zhujie;importcom.alibaba.fastjson.JSONObject;importcom…

大家好,又见面了,我是你们的朋友全栈君。

查看@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;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127886.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android如何获取证书签名?

    android如何获取证书签名?cygwin环境下在cygwin环境下运行如下命令,输出结果即为signaturekeytool-exportcert-alias[alias]-keypass[aliaspassword]-keystore[keystorefilepath]-storepass[keystorepassword]|md5sum 例如:当前路径下包含用于对app签名的t

    2022年5月31日
  • Java锁的概念「建议收藏」

    Java锁的概念「建议收藏」一:悲观锁在Java中,synchronized和lock锁都是悲观锁。定义:悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改二:乐观锁定义:认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据。如果这个数据没有被更新,当前线程将自己修改的数据成功写入。如果数据已经被其他线程更新,则根据不同的实现方式执行不同的操作(例如报错或者自动重试)。乐观锁在Java中.

    2022年7月7日
  • WPF Visifire图表控件使用基础

    WPF Visifire图表控件使用基础https://www.cnblogs.com/wyuan/archive/2012/07/22/WPF.html引言:  由于项目中需要使用Visifire所以自己就写了一些demo,大家一起共享!基础Visifire图表的展示1.Visifire的创建需要引用的DLL包【WPFToolkit.dll;WPFVisifire.Charts;WPFVisifire.Gauges(这个以后会用到)】2

    2022年7月21日
  • Python机器学习实战<一>:环境的配置

    Python机器学习实战<一>:环境的配置

    2021年11月14日
  • linux快捷键停止抓包命令,【linux命令】Linux抓包命令tcpdump以及常见抓包使用方法…[通俗易懂]

    linux快捷键停止抓包命令,【linux命令】Linux抓包命令tcpdump以及常见抓包使用方法…[通俗易懂]一个学友问下怎么没有抓包命令的教程,感谢热心反馈,特地这里简单补充下内容以便学友了解。系统运行过程中,难免发现服务器一些流量异常或访问异常,我们可以采用tcpdump命令进行抓包。下边简单介绍下该命令使用办法。1,安装tcpdump一些系统默认没有安装,我们需要yum安装下这个命令:yuminstalltcpdump-y2,tcpdump使用。一些使用我们可以tcpdump–help看下…

    2022年8月20日
  • SAP PRD SYSTEM COPY TO QAS具体操作步聚

    SAP PRD SYSTEM COPY TO QAS具体操作步聚SAPPRDSYSTEMCOPYTOQAS具体操作步聚 转载于:https://blog.51cto.com/anhwei/1242357

    2022年6月28日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号