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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频「建议收藏」

    python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频「建议收藏」一些网站会提供m3u8视频地址,以供下载观看。或者一些网站经过分析后发现是使用m3u8格式进行播放的,这时使用m3u8的地址链接就可以下载到相应的视频。一、关于m3u8:(https://blog.csdn.net/baidu_34418350/article/details/64922512)m3u8是苹果公司推出一种视频播放标准,是m3u的一种,不过编码方式是utf-8,是一种…

    2022年6月30日
    39
  • 硬核!用Mac Mini翻新了一台12年前的电脑

    硬核!用Mac Mini翻新了一台12年前的电脑本文转载自差评君有这么一位差友,不知道从哪儿加到了托尼的微信,都还没打招呼呢,上来就向我展现了他最近的硬核杰作。他将M1款的MacMini塞进了09年款27寸iMac,并把详细过程一股脑发给了我。尽管不清楚这样做有什么意义,但确实是做的很硬核,手法也相当专业,简单来说,他愣是把一台新电脑,塞进了一台老电脑。。。整理了一下他发过来的内容,大致弄清了这事儿的前因后果。把M1款的Macmini,塞进了09年iMac的想法,是他在看到了油管上有一位叫L…

    2022年5月30日
    86
  • 客服客户聊天系统源码分享[通俗易懂]

    客服客户聊天系统源码分享[通俗易懂]静态H5聊天对话框html源码客服系统代码(3)此程序可用作客户与客服聊天使用,也可以作为app程序嵌入的聊天功能或者站内聊天使用的代码。运行视频效果:链接:https://pan.baidu.com/s/1lMbXgY3rVRw4ZFfwePJOTw提取码:bfyh复制这段内容后打开百度网盘手机App,操作更方便哦静态H5聊天输入对话框html代码(1)静态H5聊天输入对话框html代码(2)上节讲了消息对话如何实现,上节规划中是来如何实现做到推送实时刷新,看了ba.

    2022年9月15日
    0
  • 防暴力激活成功教程密码的脚本「建议收藏」

    防暴力激活成功教程密码的脚本「建议收藏」前几天,突然发现日志文件/var/log/auth.log(ubuntu)或者/var/log/secure(centos),存在好多尝试激活成功教程用户密码的现象,如下脚本通过获取到日志文件的IP地址,加入到/etc/hosts.deny文件中,拒绝该IP地址的尝试登陆服务器。#1.定义变量,获取日志中刷选的IP地址DIR_file=/var/log/auth.logIP_list=`awk’/…

    2022年8月22日
    3
  • MYSQL 神奇的操作insert into test select * from test;

    MYSQL 神奇的操作insert into test select * from test;

    2022年2月9日
    69
  • c++入门教程–-4运算符

    c++入门教程–-4运算符

    2021年3月12日
    144

发表回复

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

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