此文来源于: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;

fastjson @JSONField的更多相关文章

  1. Springboot使用alibaba的fastJson,@JSONField不起作用的问题

    在Springboot中默认的JSON解析框架是jackson 今天引入alibaba的fastjson,使用@JSONField(serialize=false),让@RestController转 ...

  2. FastJSON基础

    对象的类型 json文本 json数组 json对象 java对象 类型的转换 json文本      转   json对象      JSON.parseObject(str) json文本     ...

  3. 【技术累积】【点】【java】【27】@JSONField

    @JSONField 该注解隶属于阿里fastjson,方便fastjson处理对象时的一些操作 源码 @Retention(RetentionPolicy.RUNTIME) @Target({ El ...

  4. Jackson替换fastjson

    为什么要替换fastjson 工程里大量使用了fastjson作为序列化和反序列化框架,甚至ORM在处理部分字段也依赖fastjson进行序列化和反序列化.那么作为大量使用的基础框架,为什么还要进行替 ...

  5. FastJson的使用心得

      本文为早前整理,参考文献已找不到,如有侵权请与我联系,添加参考链接. 一丶基本使用 1.1主要API fastjson入口类是com.alibaba.fastjson.JSON,主要的API是JS ...

  6. 无法访问com.alibaba.fastjson.parser.deserializer.PropertyProcessable

    某项目加入了某依赖A,IDEA里编译报了如下错误: 无法访问com.alibaba.fastjson.parser.deserializer.PropertyProcessable 错误代码行为某个使 ...

  7. 工具类-Fastjson入门使用

    简介 什么是Fastjson? fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到Java ...

  8. jackson JsonPropertyOrder和@JsonIgnoreProperties注解

    有些时候,我们在和外部系统交互的时候使用了json作为标准的数据交换格式,同时为了安全性考虑,增加了对报文的校验,因此我们需要确保序列化的时候参数有序且不多不少刚好,因为对外的API不像后台和前端交互 ...

  9. FastJson中@JSONField注解使用

    最近做项目中,使用了json格式在服务器之间进行数据传输.但是发现json格式数据不符合JAVA中的变量定义规则,并且难以理解,因此需要在后台中做二次处理,将数据处理成我们系统中定义的格式. 思路: ...

随机推荐

  1. Maven工程构建

    Maven 相关术语: 本地资源库:用来存储项目的依赖库,默认的文件夹是 “.m2” 目录 中央存储库: 用来下载所有项目的依赖库的默认位置 Maven pom.xml: 项目对象模型(Project ...

  2. safari兼容时间格式 NAN

    问题: safari中不支持2018-08-01这种格式转为时间戳会显示NaN 方案: new Date('2018/08/01').getTime() 将-转化为/ // 正则替换 new Date ...

  3. net core 返回值

    //指定类下的子类 Type helloType = typeof(ActionResult); List<Type> types = new List<Type>(); fo ...

  4. POJ 3180 牛围着池塘跳舞 强连通分量裸题

    题意:一群牛被有向的绳子拴起来,如果有一些牛(>=2)的绳子是同向的,他们就能跳跃.求能够跳跃的组数. #include <iostream> #include <cstdio ...

  5. TTTTTTTTTTTTT LA 2191 树状数组 稍修改

    题意:给出n个数字,操作有修改(S)和输出区间和(M). #include <iostream> #include <cstdio> #include <cstring& ...

  6. 【bzoj4562】[Haoi2016]食物链

    *题目描述: 如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动关系,求其中的食物链条数. 物种的名称为从1到n编号 M条能量流动关系形如 a1 b1 a2 b2 a ...

  7. (58)PHP开发

    LAMP 0.使用include和require命令来包含外部PHP文件. 使用include_once命令,但是include和include_once命令相比的不足就是这两个命令并不关心请求的文件 ...

  8. I/O 多路复用的特点:

    I/O 多路复用是通过一种机制使一个进程能同时等待多个文件描述符(fd),而这些文件描述符(套接字描述符)其中的任意一个进入读就绪状态,epoll()函数就可以返回. 所以, IO多路复用,本质上不会 ...

  9. 微信小程序 API 网络(ajax)

    网络 API 类似于 ajax 向服务器请求网络地址,唯一不同的是这个请求有很多的规则,且必须向服务器上请求,不能在本地请求 网络 发送请求: wx.request() 发起https网络请求 参数: ...

  10. c++11多线程---线程操作

    1.等待线程执行完成 join() 方法数会阻塞主线程直到目标线程调用完毕,即join会直接执行该子线程的函数体部分. 2.暂停线程(线程休眠) 使用std::this_thread::sleep_f ...