JsonProperty及JSONField注解的使用说明

 更新时间:2024年12月10日 14:46:16   作者:linab112  
文章介绍了两个常用的Java库注解:Jackson的@JsonProperty和Fastjson的@JSONField,它们用于控制Java对象与JSON数据之间的序列化和反序列化,文章详细说明了这两个注解的常见属性及其使用场景,包括指定属性名、控制字段可见性、设置默认值和标记字段的必需性

JsonProperty及JSONField注解的使用

1.JsonProperty

1.1.说明

@JsonProperty 注解是 Jackson 库中的一个注解,广泛用于 Java 对象与 JSON 数据之间的序列化和反序列化。

Jackson 是一个流行的 Java 库,能够将 Java 对象转换为 JSON 格式,反之亦然。

1.2.主要功能

  • 指定属性名: @JsonProperty 可以用来定义 JSON 中使用的属性名称,即使它与 Java 类中的属性名称不同。这在需要匹配特定 JSON 格式时非常有用。
  • 处理字段的可见性: 可以控制字段是否应该被序列化或反序列化。
  • 设置默认值: 可以为字段提供默认值。
  • 标记字段的必需性: 可以指示某个字段在反序列化过程中是必需的

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": "john.doe@example.com"
}

2.JSONField

2.1说明

@JSONField 是一个来自于阿里巴巴的 Fastjson 库的注解,主要用于处理 Java 对象与 JSON 数据之间的序列化和反序列化。

Fastjson 是一个高性能的 Java 语言编写的 JSON 处理工具。一般使用fastjson2。

2.2主要功能

  • 指定字段名称: @JSONField 可以用来定义在 JSON 中使用的属性名称,即使它与 Java 类中的属性名称不一致。这对于需要匹配特定 JSON 格式的场景非常有用。
  • 控制序列化/反序列化: 可以控制某个字段是否参与序列化和反序列化。例如,可以通过设置 serializedeserialize 属性为 false 来排除该字段。
  • 格式化日期: 可以指定日期字段在 JSON 中的格式,这对于日期类型的字段尤为重要。
  • 定义默认值: 在反序列化时,可以指定默认值,以便当 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": "john.doe@example.com"
}

3.使用场景

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java HashMap的keyset实例

    java HashMap的keyset实例

    简单地说,在keyset方法返回的set上做修改会改变原来hashmap,这也许不是你想要的,于是形成一个隐藏的bug
    2013-04-04
  • java 串口通信详细及简单实例

    java 串口通信详细及简单实例

    这篇文章主要介绍了java 串口通信详细及简单实例的相关资料,在开发硬件与软件结合的时候,就会用到串口,需要的朋友可以参考下
    2017-01-01
  • SpringBoot中的分布式追踪及使用详解

    SpringBoot中的分布式追踪及使用详解

    随着互联网应用程序的复杂性不断增加,分布式系统已经成为了许多企业级应用程序的标配,由于服务之间的调用关系错综复杂,很难追踪到一个请求在整个系统中的执行路径和时间,为了解决这个问题,本文将介绍SpringBoot中的分布式追踪技术及其使用方法
    2023-07-07
  • Java如果通过jdbc操作连接oracle数据库

    Java如果通过jdbc操作连接oracle数据库

    这篇文章主要介绍了Java如果通过jdbc操作连接oracle数据库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java轻松实现表单提交的三种方法

    Java轻松实现表单提交的三种方法

    在Web开发中,表单是用户与网站交互的主要方式之一,本文将详细介绍如何在Java中实现表单提交,并通过代码和案例为新手朋友提供详细的指导,有需要的可以参考下
    2024-10-10
  • SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法

    SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法

    这篇文章主要介绍了SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • java操作(DOM、SAX、JDOM、DOM4J)xml方式的四种比较与详解

    java操作(DOM、SAX、JDOM、DOM4J)xml方式的四种比较与详解

    java中四种操作(DOM、SAX、JDOM、DOM4J)xml方式的比较与详解
    2008-10-10
  • SpringBoot使用spring.factories加载默认配置的实现代码

    SpringBoot使用spring.factories加载默认配置的实现代码

    在日常开发过程中,发布一些产品或者框架时,会遇到某些功能需要一些配置才能正常运行,这时我们需要的提供默认配置项,同时用户也能覆盖进行个性化
    2024-06-06
  • Java解析json报文实例解析

    Java解析json报文实例解析

    这篇文章主要介绍了Java解析json报文实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • java常用工具类 XML工具类、数据验证工具类

    java常用工具类 XML工具类、数据验证工具类

    这篇文章主要为大家详细介绍了java常用工具类,包括XML工具类、数据验证工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05

最新评论