JsonProperty及JSONField注解的说明

目录

1.JsonProperty

2.JSONField

3.使用场景


1.JsonProperty

1.1.说明

@JsonProperty 注解是 Jackson 库中的一个注解,广泛用于 Java 对象与 JSON 数据之间的序列化和反序列化。Jackson 是一个流行的 Java 库,能够将 Java 对象转换为 JSON 格式,反之亦然。

1.2.主要功能

  1. 指定属性名 : @JsonProperty 可以用来定义 JSON 中使用的属性名称,即使它与 Java 类中的属性名称不同。这在需要匹配特定 JSON 格式时非常有用。

  2. 处理字段的可见性: 可以控制字段是否应该被序列化或反序列化。

  3. 设置默认值: 可以为字段提供默认值。

  4. 标记字段的必需性: 可以指示某个字段在反序列化过程中是必需的

1.3.常见属性

  • value: 指定 JSON 字段的名称。

  • required: 布尔值,指示在反序列化时该字段是否是必需的(默认为 false)。

  • defaultValue: 指定一个默认值,当 JSON 数据中没有提供该字段时使用。

    import com.fasterxml.jackson.annotation.JsonProperty;

    public class Product {

    复制代码
      @JsonProperty(value = "product_id", required = true)
      private int id;
    
      @JsonProperty(value = "product_name", defaultValue = "Unnamed Product")
      private String name;
    
      // Getters and Setters...

    }

1.4.示例

复制代码
import com.fasterxml.jackson.annotation.JsonProperty;

public class User {
    
    @JsonProperty("user_id")
    private int id;

    @JsonProperty("user_name")
    private String name;

    @JsonProperty("user_email")
    private String email;

    // Getters and Setters
    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

给定上面的 User 类,下面是其对应的 JSON 表示:

复制代码
{
    "user_id": 1,
    "user_name": "John Doe",
    "user_email": "[email protected]"
}

2.JSONField

2.1说明

@JSONField 是一个来自于阿里巴巴的 Fastjson 库的注解,主要用于处理 Java 对象与 JSON 数据之间的序列化和反序列化。Fastjson 是一个高性能的 Java 语言编写的 JSON 处理工具。一般使用fastjson2。

2.2主要功能

  1. 指定字段名称 : @JSONField 可以用来定义在 JSON 中使用的属性名称,即使它与 Java 类中的属性名称不一致。这对于需要匹配特定 JSON 格式的场景非常有用。

  2. 控制序列化/反序列化 : 可以控制某个字段是否参与序列化和反序列化。例如,可以通过设置 serializedeserialize 属性为 false 来排除该字段。

  3. 格式化日期: 可以指定日期字段在 JSON 中的格式,这对于日期类型的字段尤为重要。

  4. 定义默认值: 在反序列化时,可以指定默认值,以便当 JSON 数据中缺少该字段时使用。

2.3常用属性

  • name: 指定 JSON 字段的名称。

  • serialize: 布尔值,指示该字段是否参与序列化(默认为 true)。

  • deserialize: 布尔值,指示该字段是否参与反序列化(默认为 true)。

  • format: 用于格式化时间字段,例如 "yyyy-MM-dd"

    import com.alibaba.fastjson.annotation.JSONField;

    public class Product {

    复制代码
      @JSONField(name = "product_id", serialize = true, deserialize = true)
      private int id;
    
      @JSONField(name = "product_name", defaultValue = "Unnamed Product")
      private String name;
    
      @JSONField(name = "created_at", format = "yyyy-MM-dd HH:mm:ss")
      private Date createdAt;
    
      // Getters and Setters...

    }

2.4示例

复制代码
import com.alibaba.fastjson.annotation.JSONField;

public class User {
    
    @JSONField(name = "user_id")
    private int id;

    @JSONField(name = "user_name")
    private String name;

    @JSONField(name = "user_email")
    private String email;

    // Getters and Setters
    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

使用上面的 User 类,下面是其对应的 JSON 表示:

复制代码
{
    "user_id": 1,
    "user_name": "John Doe",
    "user_email": "[email protected]"
}

3.使用场景

避免使用lombok的data注解,导致前端接收的json内容的key和后端中bean的id不一致的问题,可以使用上面两个注解,当然也可以手写get set方法,避免此问题

相关推荐
勘察加熊人8 分钟前
wpf+c#路径迷宫鼠标绘制
开发语言·c#·wpf
在京奋斗者12 分钟前
spring boot自动装配原理
java·spring boot·spring
小黄人软件1 小时前
C# ini文件全自动界面配置:打开界面时读ini配置到界面各控件,界面上的控件根据ini文件内容自动生成,点保存时把界面各控件的值写到ini里。
开发语言·c#
明天不下雨(牛客同名)3 小时前
为什么 ThreadLocalMap 的 key 是弱引用 value是强引用
java·jvm·算法
多多*3 小时前
Java设计模式 简单工厂模式 工厂方法模式 抽象工厂模式 模版工厂模式 模式对比
java·linux·运维·服务器·stm32·单片机·嵌入式硬件
Android洋芋4 小时前
C语言深度解析:从零到系统级开发的完整指南
c语言·开发语言·stm32·条件语句·循环语句·结构体与联合体·指针基础
bjxiaxueliang4 小时前
一文详解QT环境搭建:Windows使用CLion配置QT开发环境
开发语言·windows·qt
Run_Teenage4 小时前
C语言 【初始指针】【指针一】
c语言·开发语言
苹果.Python.八宝粥5 小时前
Python第七章02:文件读取的练习
开发语言·python
胡图蛋.5 小时前
Spring Boot 支持哪些日志框架?推荐和默认的日志框架是哪个?
java·spring boot·后端