程序员子龙(Java面试 + Java学习) 程序员子龙(Java面试 + Java学习)
首页
学习指南
工具
开源项目
技术书籍

程序员子龙

Java 开发从业者
首页
学习指南
工具
开源项目
技术书籍
  • 基础

    • java 学习路线图
    • HashMap 详解
    • Java 8 日期和时间 - 如何获取当前时间和时间戳?
    • Java 模板变量替换(字符串、占位符替换)
    • JDK 代理
    • Java SPI 详解
    • java stream 看这一篇文章就够了
    • Java 泛型详解
    • Java 动态修改注解值
    • 如何正确遍历删除List中的元素
    • 什么是Java注解
    • 异步编程神器:CompletableFuture详解
    • FIFO 、LRU、LFU算法
    • 十进制转十六进制
    • java中double类型数据加减乘除操作精度丢失问题及解决方法
    • JAVA利用反射清除实体类对应字段
    • JSON转换问题最全详解(json转List,json转对象,json转JSONObject)
    • java 8 List 根据某个字段去重
    • Java List排序
    • 压缩算法:字符串(JSON)压缩和解压【JDK之Deflater压缩与Inflater解压】
    • BCD码是什么?
    • Java二进制、八进制、十进制、十六进制转换
    • Java String字符串 与 ASCII码相互转换
    • 什么是跨域?解决方案有哪些?
    • Java 16进制字符串转10进制
    • LinkedHashMap实现LRU - 附重点源码解析
    • 去掉 if...else 的七种绝佳之法
    • 一眼看清@JSONField注解使用与效果
    • JVM

    • Spring

    • 并发编程

    • Mybatis

    • 网络编程

    • 数据库

    • 缓存

    • 设计模式

    • 分布式

    • 高并发

    • SpringBoot

    • SpringCloudAlibaba

    • Nginx

    • 面试

    • 生产问题

    • 系统设计

    • 消息中间件

    • Java
    • 基础
    程序员子龙
    2024-06-07
    目录

    一眼看清@JSONField注解使用与效果

    # @jsonField注解

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
    public @interface JSONField {
        int ordinal() default 0;
    
        String name() default "";
    
        String format() default "";
    
        boolean serialize() default true;
    
        boolean deserialize() default true;
        //其他省略
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    # @jsonField注解常用属性

    name : 给字段起别名

    ordinal :用来排序 输出json字符串中key属性的先后顺序 可以用 @JSONType (orders={})来代替

    format : 用来日期格式化

    serialize :指定字段不序列化

    deserialize :指定字段不序列化

    @JSONField注解可以用在方法(method),属性(field)以及方法中的参数(parameter)上。JSONField中的name属性用来指定JSON串中key的名称。

    通过用@JSONField注解一个类的属性,我们可以达到以下目标:

    指定field对应的key名称:@JSONField(name = “Demo”) 对于时间字段,指定其格式:@JSONField(format = “yyyy-MM-dd HH:mm:ss”) 不序列化某些字段:@JSONField(serialize = false) 指定顺序:@JSONField(ordinal = 1) 当然,以上注解里的属性,可以同时使用:@JSONField(name = “Name”, format = “yyyy-MM-dd HH:mm”)

    # @JSONField注解常用的使用场景总结

    # 修改字段名称

    当我们在与前端进行交互时,前端想要的字段与我们提供的字段名不同,这时候一种解决方案是修改实体类,但如果该实体类应用的比较多,那改起来的代价太大,因此,可以使用注解@JSONField来实现替换效果,用法如下:

    @JSONField(name = "size_new")
    private int size;
    
    
    1
    2
    3

    # 支持序列化和反序列化

    序列化和反序列化默认值均为true,则默认情况下是允许该字段序列化和反序列化的,如下:

    boolean serialize() default true;
    boolean deserialize() default true;
    
    
    1
    2
    3

    使用方法(以下不支持序列化,支持反序列化)

    @JSONField(name = "size_new", serialize = false, deserialize = true)
    private int size;
    
    1
    2

    当我们的某些字段为空值时,我们仍希望将此字段返回到前端(该配置可以返回带有空字段的字符串,但是当字段为基本数据类型时无效,须将其转换为包装类)

    @JSONField(serialzeFeatures= SerializerFeature.WriteMapNullValue)
    
    1

    # 指定字段顺序

    将Java对象转换为JSON格式,转换后的字段顺序会根据首字母来排序,可通过如下方式来指定字段顺序:

    @JSONField(name = "size_new", ordinal = 3)
    private int size;
    
    @JSONField(name = "weight_new", ordinal = 1)
    private int weight;
    
    @JSONField(name = "colour_new", ordinal = 2)
    private String colour;
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    # 格式化时间

     @JSONField(name = "pay_time", format = "yyyy-MM-dd HH:mm:ss")
     Date payTime;
    
    
    1
    2
    3

    # 总结

    FastJson中的注解@JSONField,一般作用在get/set方法上面,常用的使用场景有修改和json字符串的字段映射的name、格式化时间、过滤掉不需要序列化的字段。

    上次更新: 2024/10/09, 22:27:53
    去掉 if...else 的七种绝佳之法
    JVM 入门 -- 内存区域详解

    ← 去掉 if...else 的七种绝佳之法 JVM 入门 -- 内存区域详解→

    最近更新
    01
    一个注解,优雅的实现接口幂等性
    11-17
    02
    MySQL事务(超详细!!!)
    10-14
    03
    阿里二面:Kafka中如何保证消息的顺序性?这周被问到两次了
    10-09
    更多文章>
    Theme by Vdoing | Copyright © 2024-2024

        辽ICP备2023001503号-2

    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式