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的正则表达式_python正则表达式例子

    Python的正则表达式_python正则表达式例子nlp任务中,正则表达式是一个很好的工具。推荐资源:https://github.com/ziishaned/learn-regex/https://regex101.com/在线练习结合网上的教程,我的整理如下:先来举个例子:#解析网页HTML<html><body><h1>helloworld&…

    2022年9月16日
    2
  • clion激活_最新在线免费激活

    (clion激活)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月29日
    76
  • 数据库系统概论第五版 课后习题答案王珊

    数据库系统概论第五版 课后习题答案王珊第1章绪论1.试述数据、数据库、数据库系统、数据库管理系统的概念。答:(l)数据(Data):描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表示这些对象的数据…

    2022年9月14日
    2
  • java开发工程师的简历怎么写(应聘网络工程师简历)

    这是一篇我比较想看到的简历指导的文章。但是我比较反对简历造假。我觉得会什么写什么把。Java就业指导  想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些内容写到你的简历中,当然更需要的是你在面试的时候向面试官展示这些专业技能。相信此文…

    2022年4月17日
    106
  • mysql错误代码1142_如何安装mysql数据库

    mysql错误代码1142_如何安装mysql数据库我的phpmyadmin或MySQL命令行不允许我执行以下查询:SELECTcustomer.First,customer.Last,login.Username,login.Password,customer.Addrln1,customer.Addrln2,customer.Postcode,customer.County,customer.Country,customer….

    2022年10月1日
    3
  • mysql多字段主键_sql改变列数据类型

    mysql多字段主键_sql改变列数据类型MySQL数据类型(1)数值类型1、整数型2、浮点型3、定点型(2)日期时间类型(3)字符串类型MySQL字段属性1、空\不为空值:NULL、NOTNULL2、主键:primarykey3、唯一键:uniquekey4、自增长:auto_increment5、默认值:default6、字段描述:comment数值类型整数类型:tinyint、smallint、mediumint、intege…

    2022年9月2日
    5

发表回复

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

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