@JSONField 注解详解和应用

2023-05-16

讲到@JSONField 注解,就不得不提到Alibaba 开源的fasejson

fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果看这里:https://github.com/eishay/jvm-serializers/wiki

这里有jackson作者cowtowncoder等人对fastjson的性能评价:https://groups.google.com/forum/#!topic/java-serialization-benchmarking/8eS1KOquAhw

Fastjson VS gson性能
fastjson比gson快大约6倍,测试结果上这里:https://github.com/eishay/jvm-serializers/wiki/Staging-Results

下面我们来介绍@JSONField 注解的应用:

1. JSONField 介绍

注意:1.1、若属性是私有的,必须有set*方法。否则无法反序列化。

package com.alibaba.fastjson.annotation;
public @interface JSONField {
// 配置序列化和反序列化的顺序,1.1.42版本之后才⽀持
int ordinal() default 0;
// 指定字段的名称
String name() default "";
// 指定字段的格式,对⽇期格式有⽤
String format() default "";
// 是否序列化
boolean serialize() default true;
// 是否反序列化
boolean deserialize() default true;
}

2. JSONField配置方式

2.1FieldInfo可以配置在getter/setter方法或者字段上。例如:

public class A {
    private int id;

    @JSONField(name="ID")
    public int getId() {return id;}
    @JSONField(name="ID")
    public void setId(int value) {this.id = id;}
}

2.2 配置在field上

public class A {
    @JSONField(name="ID")
    private int id;

    public int getId() {return id;}
    public void setId(int value) {this.id = id;}
}

2.3 使⽤format配置⽇期格式化

public class A {
    // 配置date序列化和反序列使⽤yyyyMMdd⽇期格式
    @JSONField(format="yyyyMMdd")
    public Date date;
}

2.4 使⽤serialize/deserialize指定字段不序列化

public class A {
    @JSONField(serialize=false)
    public Date date;
}

2.5 使⽤ordinal指定字段的顺序

注:缺省fastjson序列化一个java bean,是根据fieldName的字母序进行序列的你可以通过ordinal指定字段的顺序。这个特性需要1.1.42以上版本。

public static class VO {
    @JSONField(ordinal = 3)
    private int f0;
    @JSONField(ordinal = 2)
    private int f1;
    @JSONField(ordinal = 1)
    private int f2;
}

2.6 使⽤serializeUsing制定属性的序列化类

*在fastjson 1.2.16版本之后,JSONField的持新的定制化配置serializeUsing,可以单独对某个类的某个属性定制序列化,例如:*


package com.fxbin123.bean;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.JSONSerializer;
import com.alibaba.fastjson.serializer.ObjectSerializer;

import java.io.IOException;
import java.lang.reflect.Type;

/**
 * @创建用户: fxb
 * @创建时间: 2017年11月07日 10:00
 * @描述: myself test demo 
 */
public class MyTest {
    public static class A {
        @JSONField(serializeUsing = AValueSerializer.class)
        public int value;
    }

    public static class AValueSerializer implements ObjectSerializer {
        @Override
        public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
                          int features) throws IOException {
            Integer value = (Integer) object;
            String text = value + "元";
            serializer.write(text);
        }
    }

    public static void main(String[] args) {
        A obj = new A();
        obj.value = 100;
        String json = JSON.toJSONString(obj);
        System.out.println(json);
    }
}

运行结果打印输出
在这里插入图片描述

2.8 JSONField jsonDirect

在fastjson-1.2.12版本中,JSONField增加了一个新的配置项jsonDirect,它的⽤是:当你有一个字段是字符串类型,但不是json格式数据,你希望直接输json,而不是经过转义之后再输出。

 package com.fxbin123.bean;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.annotation.JSONField;
    import com.alibaba.fastjson.serializer.JSONSerializer;
    import com.alibaba.fastjson.serializer.ObjectSerializer;
    
    import java.io.IOException;
    import java.lang.reflect.Type;
    
    /**
     * @创建用户: fxb
     * @创建时间: 2017年11月07日 10:00
     * @描述: myself test demo
     */
    public class MyTest {
        public static void main(String[] args) {
    //        A obj = new A();
    //        obj.value = 100;
    //        String json = JSON.toJSONString(obj);
    //        System.out.println(json);
    
            B b = new B();
            b.id = 9999;
            b.value = "{}";
            String json = JSON.toJSONString(b);
            System.out.println(json);
        }
        public static class B{
            public int id;
            @JSONField(jsonDirect = true)
            public String value;
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@JSONField 注解详解和应用 的相关文章

  • Windows下安装JDK

    目录 一 下载二 安装三 设置环境变量1 新增环境变量 JAVA HOME2 新增环境变量 CLASS PATH3 环境变量 PATH 添加变量值 四 验证 一 下载 下载链接 xff1a https www oracle com java
  • CentOS7下安装superset

    目录 一 前言二 安装 Miniconda1 下载2 安装3 加载环境变量配置文件4 取消激活 base 环境 三 创建 Python3 9 环境1 配置 conda 国内镜像2 创建 superset 环境并指定 Python3 93 激
  • Java--a++与 ++a 与 a=a+1 与a+=1

    a 43 43 等效 a 61 a 43 1 43 43 a 等效 a 43 61 1 计算顺序的区别 xff1a a 43 43 是先参加程序的运行再 43 1 xff0c 而 43 43 a则是先 43 1再参加程序的运行 举例 xff
  • 数据仓库系列文章二:浅谈企业数据仓库总线矩阵

    Kinball在 数据仓库工具箱 一书中 xff0c 详细阐述维度建模思想 xff0c 并给出维度建模的众多实践 维度建模的核心内容和建设过程在实践中已经被大家所熟知 xff0c 网上教程也很多 xff0c 本文不做赘述 本文重点谈一谈企业
  • Java中 List、Set、Map 之间的区别

    小博此篇记录了开发过程中常用的几种集合详解 xff0c 三者的区别对比均从IDEA相关层次图里面所得知 xff0c 基于JDK8 xff0c 如有错误欢迎批评指正 List 列表 List的元素以线性方式存储 xff0c 可以存放重复对象
  • DuiLib介绍及其消息处理剖析

    DirectUI技术 DirectUI意为直接在父窗口上绘图 Paint on parent dc directly 即子窗口不以窗口句柄的形式创建 windowless xff0c 只是逻辑上的窗口 xff0c 绘制在父窗口之上 微软的
  • xargs命令

    原作者地址 xff1a https www cnblogs com chyingp p linux command xargs html 感谢原作者 Linux基础 xff1a xargs命令 简介 xargs可以将输入内容 xff08 通
  • 为何HBase速度很快?

    为何HBase速度很快 xff1f HBase能提供实时计算服务主要原因是由其架构和底层的数据结构决定的 xff0c 即由LSM Tree Log Structured Merge Tree 43 HTable region分区 43 Ca
  • VirtualBox虚拟机不能ping通宿主机的解决方法

    解决VirtualBox虚拟机不能ping通宿主机的问题 问题描述 在VirtualBox虚拟中 xff0c 无法ping通宿主机 xff0c 宿主机可以ping通虚拟机 虚拟机的网络已经设置为 桥接网卡 xff0c 也可以正常上网 问题原
  • CMake 使用方法 & CMakeList.txt

    cmake 简介 CMake是一个跨平台的安装 编译 工具 可以用简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的makefile或者project文件 能测试编译器所支持的C 43 43 特性 类似UNIX下的automak
  • Hadoop安装目录

    root software hadoop 2 6 0 cdh5 15 1 etc hadoop 第一步骤 vi core site xml lt configuration gt lt property gt lt name gt fs d
  • 前端之浏览器

    你会不会和我一样 xff0c 开发了N年 xff0c 真要讲起浏览器 xff0c 发现自己一无所知 常用那几种浏览器测试 xff1f IE Safari Chrome Mozilla Firefox Opera 主流浏览器的内核有哪些 xf
  • Navicat远程连接Linux环境下MySQL(错误error:1045/1251/2003(10038)/2059)解决方案

    Navicat远程连接Linux环境下MySQL 错误error 1045 1251 2003 10038 2059 解决方案 心路历程 因为之后要学习有关数据库开发的课程 xff0c 我们需要部署云服务器并添加mysql功能 xff0c
  • MAX30102 血氧调试笔记

    一 血氧测量原理 1 1 PPG波形介绍 血氧饱和度 xff08 英语 xff1a Oxygen saturation xff09 xff0c 或称血氧浓度 xff0c 是指血中氧饱和血红蛋白相对于总血红蛋白 xff08 不饱和 43 饱和

随机推荐

  • HBase - Filter - 过滤器的介绍以及使用 | 那伊抹微笑

    博文作者 xff1a 那伊抹微笑 csdn 博客地址 xff1a http blog csdn net u012185296 itdog8 地址链接 http www itdog8 com thread 214 1 1 html 博文标题
  • sphereface:deep hypersphere embedding for face recognition

    SphereFace算法详解 AI之路 CSDN博客 sphereface 论文 xff1a SphereFace Deep Hypersphere Embedding for Face Recognition 论文链接 xff1a htt
  • python中的isdigit( )的使用

    python中的isdigit 函数是检测输入字符串是否只由数字组成 第三个例子既包含数字 xff0c 也包含字符串的话 xff0c 返回的也是一个False的布尔值 举例 xff1a
  • Debian没有sudo怎么办

    和Ubuntu不同 xff0c sudo命令在原始的Debian系统中时没有的 xff0c 需要额外安装 sudo apt get install sudo 编辑配置文件 xff0c 增加一个可以使用sudo命令的用户名 UserName
  • ES6——给对象部署Iterator接口

    Iterator接口的目的就是为所有数据结构提供一种统一访问的机制 xff0c 用for of 实现 一个数据结构只要有Symbol iterator属性 xff0c 就可以认为是 可遍历的 原型部署了Iterator接口的数据结构有三种
  • 我还在坚持的道路上

    高考 xff0c 一个似乎已经久远的经历但却又有一种恍如昨日的感觉 记得那年 2012年 xff0c 考完最后一场 xff0c 下着大暴雨 xff0c 那一刻有一种终于解放的窃喜但内心又憋着无形的鸭梨 xff0c 不知道最后结果会怎样 不过
  • CodeBlocks的下载安装、配置、简单编程

    IDE简介 http www baidu com s wd 61 codeblocks xff0c 这里只是介绍Windows平台下的 IDE 环境配置 CodeBlocks的下载 安装 配置 xff1a 下载 xff1a http www
  • 四、安装cuDNN,caffe和openCV

    一 安装cuDNN 1 下载cudnn 可以注册再下载 不过有点麻烦 官网https developer nvidia com cudnn 或者百度云下载http pan baidu com s 1hrAMHko 2 安装 tar span
  • 网络爬虫(三)------宽度优先爬虫(一个的基础,简单但是很重要哦)

    在实际项目中 xff0c 我们使用爬虫遍历互联网 xff0c 把网络中相关的网页全部抓取过来 xff0c 这也体现了爬虫的特点 爬虫爬行的过程是这样子的 xff1a 互联网中每一个页面看作是一个节点 xff0c 页面中的链接可以看成图的有向
  • Win10+Ubuntu双系统修复Ubuntu系统引导

    这两天笔者安装win10 43 ubuntu16 04双系统 xff0c 因为网络上能找到大量的资料 xff0c 安装过程此处就不多讲 因为笔者电脑是华硕主板 xff0c bios默认设置为安全启动 xff0c 笔者猜测会阻止加载ubunt
  • 全面分析 Spring 的编程式事务管理及声明式事务管理

    关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能 xff0c 包括编程式事务和声明式事务 通过对本教程的学习 xff0c 您将能够理解 Spring 事务管理的本质 xff0c 并灵活运用之 先决条件 本教程假定您已经掌
  • classpath*作用

    classpath It refers to a list of resources and loads all such files present in the classpath and list can be empty and i
  • java 8 根据map 字段值 去重

    java 8 根据map 字段值 去重 span class token class name List span span class token generics span class token punctuation lt span
  • java 8 去重

    span class token comment 取差集 span span class token class name List span span class token generics span class token punct
  • 解读程序员的武侠世界,顶级程序员是内外兼修的大侠,那么你呢?

    在漫天的星河中 xff0c 有这样一颗星 xff0c 他朴实无华 xff0c 却又熠熠生辉 xff0c 照亮了无数人的人生 他就是金庸先生 随着一代大侠的驾鹤西去 xff0c 飞雪连天射白鹿 xff0c 笑书神侠倚碧鸳 xff0c 成为绝响
  • Eclipse使用入门教程

    Eclipse使用入门教程 说起java的IDE xff0c 朗朗上口的无非是Eclipse了 xff0c 假若能熟练Eclipse xff0c 对于我们编写java程序会起到事半功倍的效果 xff0c 大大提高我们工作效率 因此本篇博文
  • Win7 + Ubuntu16.04 双系统安装

    之前安装win7 43 Ubuntu14 04双系统 xff0c 后来换成win10用了一段时间后觉得有些卡 xff0c 而且装双系统装了几次都成功 xff0c 所以又换回了win7系统 xff0c 并重新安装了win7 43 Ubuntu
  • 双系统Ubuntu 引导修复(Boot Repair)

    安装完双系统 xff0c 如果在使用过程中不小心删除了Ubuntu引导向 xff0c 则会导致开机后无法选择进入Ubuntu系统 或者当我们重装了windows系统后 xff0c 也会发现原来的Ubuntu引导不见了 xff0c 当出现这两
  • 数据库为何要有复合主键(多主键)

    最近学习一点数据库的基本知识 xff0c 被一个问题困惑了许久 xff1a 主键是唯一的索引 xff0c 那么为何一个表可以创建多个主键呢 xff1f 其实 主键是唯一的索引 这话有点歧义的 举个例子 xff0c 我们在表中创建了一个ID字
  • @JSONField 注解详解和应用

    讲到 64 JSONField 注解 xff0c 就不得不提到Alibaba 开源的fasejson fastjson是目前java语言中最快的json库 xff0c 比自称最快的jackson速度要快 xff0c 第三方独立测试结果看这里