当前位置: 首页 > news >正文

SpringBoot注解--11--@JSONField @JsonProperty

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一个问题:后端实体类isXXX开头的属性,传到前端后自动去掉is
    • 解决方法:
  • @JsonProperty和@JSONField
    • 1.简介
    • 2.注解的区别
      • 2.1 底层框架不同
      • 2.2 作用域不同
      • 2.3 优劣对比
  • @JsonProperty
        • 如果使用的是新建的==springboot项目==,默认就是Jackson序列化,直接在属性上使用注解即可。
    • 1.依赖
    • 2.测试json字符串与bean对象相互转换
  • @JSONField
    • 1.依赖
    • 2.测试json字符串与bean对象相互转换
    • 3.format属性
    • 4. serialize属性
    • 5.deserialize属性
    • 6.ordinal属性
    • 7.defaultValue属性
    • 8. type属性


一个问题:后端实体类isXXX开头的属性,传到前端后自动去掉is

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解决方法:

  1. 将生成的isReceipt()方法名改成getIsReceipt()
  2. 在生成的get方法上面也就是isReceipt上面加上@JsonProperty(value = “isXXX”)注解
 @JsonProperty(value = "isReceipt")public boolean isReceipt() {return isReceipt;}@JsonProperty(value = "isExamine")public boolean isExamine() {return isExamine;}

在这里插入图片描述

@JsonProperty和@JSONField

1.简介

  • @JsonProperty和@JSONField注解都是为了解决obj转json字符串的时候,将java bean的属性名替换成目标属性名。常见于调用第三方接口的时候属性名不一致的场景。
  • 两个注解的作用是相同的,只是来源不同,使用方式不同。下面将详解其异同!

2.注解的区别

2.1 底层框架不同

  • @JsonProperty 是Jackson实现的
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>版本号</version>
</dependency>
  • @JSONField 是fastjson实现的
         <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>版本号</version></dependency>

2.2 作用域不同

@JSONproperty 注解用于属性上面

  • 如把trueName属性序列化为name,可以在属性名上面增加@JsonProperty(value=“name”)。

@JSONField 注解可以用于get、set 以及 属性上面

  • 如把trueName属性序列化为name,可以在get/set/属性名上面增加@JSONField(value=“name”)。

2.3 优劣对比

  1. @JSONField注解的使用方式更加简单,注解默认的值与属性名相同,而@JsonProperty需要手动指定属性名

  2. @JSONField注解支持更多的属性映射选项,例如序列化时的日期格式,空值的处理方式等

  3. @JSONField注解的性能较快,因为fastjson本身就是一款高性能的JSON处理库

  4. 在使用Jackson框架时,只能使用@JsonProperty注解,无法使用@JSONField注解

@JsonProperty

如果使用的是新建的springboot项目,默认就是Jackson序列化,直接在属性上使用注解即可。

1.依赖

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>版本号</version>
</dependency>
  • @JsonProperty注解来源于jackson包,搭配ObjectMapper().writeValueAsString(实体类)方法使用,将实体类转换成json字符串。
  • 搭配ObjectMapper().readValue(字符串)方法使用,将json字符串转换成实体类。

2.测试json字符串与bean对象相互转换

实体类:User.java

import com.fasterxml.jackson.annotation.JsonProperty;@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {@JsonProperty("JsonPropertyName")private String name;private String sex;private Integer age;
}

测试方法:

@Test
public void testJsonProperty() throws IOException{//bean ---> jsonUser user=new User("zhangsan","man",22);System.out.println(new ObjectMapper().writeValueAsString(user));//json ---> beanString str="{\"sex\":\"man\",\"age\":22,\"JsonPropertyName\":\"zhangsan\"}";System.out.println(new ObjectMapper().readValue(str, User.class).toString());
}

测试结果:

{"sex":"man","age":22,"JsonPropertyName":"zhangsan"}
User [name=zhangsan, sex=man, age=22]
  • 可见,bean转成json字符串后,@JsonProperty注解的bean属性名已经替换成了指定属性名:JsonPropertyName;

  • json字符串转成bean后,@JsonProperty注解指定的属性名已经替换成了bean属性名:name;

@JSONField

1.依赖

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>版本号</version>
</dependency>
  • @JSONField是位于fastjson包里面,搭配JSON.toJSONString(实体类)方法使用,将实体类转换成json字符串。
  • 搭配JSON.parseObject(字符串,实体类.class)方法使用,将json字符串转换成实体类。

2.测试json字符串与bean对象相互转换

实体类:User.java

import com.alibaba.fastjson.annotation.JSONField;@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {@JSONField(name="JSONFieldName")private String name;private String sex;private Integer age;
}

测试方法:

@Test
public void testSONField(){//bean ---> jsonUser user=new User("zhangsan","man",22);System.out.println(JSON.toJSONString(user));//json ---> beanString str="{\"JSONFieldName\":\"zhangsan\",\"age\":22,\"sex\":\"man\"}";System.out.println(JSON.parseObject(str, User.class).toString());	
}

测试结果:

{"JSONFieldName":"zhangsan","age":22,"sex":"man"}
User [name=zhangsan, sex=man, age=22]
  1. 可见,bean转成json字符串后,@JSONField注解的bean属性名已经替换成了指定属性名:JSONFieldName;
  2. json字符串转成bean后,@JSONField注解指定的属性名已经替换成了bean属性名:name;
  3. 测试结果同@JsonProperty。

3.format属性

通过format属性可以指定日期类型属性的格式,以及将数字类型转为字符串类型的格式

public class User {private String name;private int age;@JSONField(format = "yyyy-MM-dd")private Date birthday;@JSONField(format = "#,###.00")private double salary;
}
  • 在上面的例子中,使用@JSONField注解指定了birthday属性的日期格式为“yyyy-MM-dd”
  • salary属性的数字格式为“#,###.00”

4. serialize属性

  • 通过serialize属性可以控制属性是否序列化到JSON对象中
  • 当serialize属性为false时,属性将不会序列化到JSON对象中,默认为true
public class User {@JSONField(serialize = false)private int userId;private String name;private int age;
}

在上面的例子中,使用@JSONField注解将userId属性从序列化中排除

5.deserialize属性

  • 通过deserialize属性可以控制是否将JSON对象中的属性反序列化到Java对象中
  • 当deserialize属性为false时,该属性将不会从JSON对象中反序列化到Java对象中,默认为true
public class User {private int userId;private String name;@JSONField(deserialize = false)private int age;
}

在上面的例子中,使用@JSONField注解将age属性从反序列化中排除

6.ordinal属性

通过ordinal属性可以指定属性的顺序

  • 默认情况下,属性的顺序是按照属性在Java对象中的顺序排列的
public class User {@JSONField(ordinal = 2)private String name;@JSONField(ordinal = 1)private int age;
}

在上面的例子中,使用@JSONField注解指定了age属性的顺序为1,name属性的顺序为2

7.defaultValue属性

通过defaultValue属性可以指定属性在Java对象中的默认值

public class User {@JSONField(defaultValue = "0")private int userId;@JSONField(defaultValue = "N/A")private String name;private int age;
}

在上面的例子中,使用@JSONField注解指定了userId属性的默认值为0,name属性的默认值为“N/A”

8. type属性

  • 通过type属性可以指定属性的类型
public class User {private int userId;@JSONField(type = FieldType.STRING)private int age;
}

在上面的例子中,使用@JSONField注解指定了age属性的类型为字符串类型

相关文章:

SpringBoot注解--11--@JSONField @JsonProperty

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一个问题&#xff1a;后端实体类isXXX开头的属性&#xff0c;传到前端后自动去掉is解决方法&#xff1a; JsonProperty和JSONField1.简介2.注解的区别2.1 底层框架不…...

C语言 | Leetcode C语言题解之第221题最大正方形

题目&#xff1a; 题解&#xff1a; int maximalSquare(char** matrix, int matrixSize, int* matrixColSize){int dp[301][301]{0};int wid0;if(matrixSize0&&matrixColSize[0]0){return 0;}for(int i0;i<matrixSize;i){for(int j0;j<matrixColSize[0];j){if(m…...

AI数据服务如何驱使AI商业化,实现在各行业落地融合

AI技术经历数十载的发展&#xff0c;正在加速向各行各业渗透。近年来深度学习加速了人工智能技术的商业化落地的同时&#xff0c;也带来了大量AI算法训练需求&#xff0c;推动AI数据服务市场的快速增长。作为AI快速发展的“基石”&#xff0c;AI数据服务AI数据服务如何驱使AI在…...

户用光伏项目开发流程

1、收集业主信息 管理业主基本信息&#xff0c;包括但不限于联系方式、地址、房屋信息等。 2、业主开卡 每户都需要办理银行卡&#xff0c;用于电费结算和划转。 3、合同签约 业主开卡完成之后&#xff0c;平台方发起签约&#xff08;支持线上签约&#xff09;&#xff0c…...

C++ 函数返回值是引用类型使用场景

目录 1、希望返回函数内部的局部静态变量或全局变量 2、希望通过函数返回一个对象的成员变量 3、希望实现链式操作 4、避免对象的拷贝 5、需要注意的事项 在C中&#xff0c;函数的返回值可以是引用类型的情况主要有以下几种&#xff1a; 1、希望返回函数内部的局部静态变…...

CUDA原子操作

代码 #include <cuda_runtime.h> #include <stdio.h>__global__ void atomicAddAndGet(int *result, int *valueToAdd) {// 原子加法int addedValue atomicAdd(result, *valueToAdd);// 通过原子操作后读取值&#xff0c;确保是加法后的值addedValue *valueToAd…...

08.C2W3.Auto-complete and Language Models

往期文章请点这里 目录 N-Grams: OverviewN-grams and ProbabilitiesN-gramsSequence notationUnigram probabilityBigram probabilityTrigram ProbabilityN -gram probabilityQuiz Sequence ProbabilitiesProbability of a sequenceSequence probability shortcomingsApproxi…...

【linux】log 保存和过滤

log 保存 ./run.sh 2>&1 | tee -a /home/name/log.txt log 过滤 import os import re# Expanded regular expression to match a wider range of error patterns error_patterns re.compile(# r(error|exception|traceback|fail|failed|fatal|critical|warn|warning…...

GeoTrust ——适合企业使用的SSL证书!

GeoTrust是一家全球知名的数字证书颁发机构&#xff08;CA&#xff09;&#xff0c;其提供的SSL证书非常适合企业使用。GeoTrust的SSL证书为企业带来了多重优势&#xff0c;不仅在验证级别、加密强度、兼容性、客户服务等方面表现出色&#xff0c;而且其高性价比和灵活的证书选…...

Kubelet 认证

当我们执行kubectl exec -it pod [podName] sh命令时&#xff0c;apiserver会向kubelet发起API请求。也就是说&#xff0c;kubelet会提供HTTP服务&#xff0c;而为了安全&#xff0c;kubelet必须提供HTTPS服务&#xff0c;且还要提供一定的认证与授权机制&#xff0c;防止任何知…...

aws slb

NLB 目标组 Target is in an Availability Zone that is not enabled for the load balancer 解决&#xff1a; https://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/network/load-balancer-troubleshooting.html 负载均衡器添加 后端EC2 所在的vpc网段即可。…...

【AI大模型】ChatGPT-4 对比 ChatGPT-3.5:有哪些优势

引言 ChatGPT4相比于ChatGPT3.5,有着诸多不可比拟的优势&#xff0c;比如图片生成、图片内容解析、GPTS开发、更智能的语言理解能力等&#xff0c;但是在国内使用GPT4存在网络及充值障碍等问题&#xff0c;如果您对ChatGPT4.0感兴趣&#xff0c;可以私信博主为您解决账号和环境…...

详解yolov5的网络结构

转载自文章 网络结构图&#xff08;简易版和详细版&#xff09; 此图是博主的老师&#xff0c;杜老师的图 网络框架介绍 前言&#xff1a; YOLOv5是一种基于轻量级卷积神经网络&#xff08;CNN&#xff09;的目标检测算法&#xff0c;整体可以分为三个部分&#xff0c; ba…...

汽车零配件行业看板管理系统应用

生产制造已经走向了精益生产&#xff0c;计算时效产出、物料周转时间等问题&#xff0c;成为每一个制造企业要面临的问题&#xff0c;工厂更需要加快自动化&#xff0c;信息化&#xff0c;数字化的布局和应用。 之前的文章多次讲解了企业MES管理系统&#xff0c;本篇文章就为大…...

【Go】函数的使用

目录 函数返回多个值 init函数和import init函数 main函数 函数的参数 值传递 引用传递&#xff08;指针&#xff09; 函数返回多个值 用法如下&#xff1a; package mainimport ("fmt""strconv" )// 返回多个返回值&#xff0c;无参数名 func Mu…...

宝塔面板运行Admin.net框架

准备 宝塔安装 .netcore安装 Admin.net框架发布 宝塔面板设置 完结撒花 1.准备 服务器/虚拟机一台 系统Windows server / Ubuntu20.04&#xff08;本贴使用的是Ubuntu20.04版本系统&#xff09; Admin.net开发框架 先安装好服务器系统&#xff0c;这里就不做安装过程描述了&…...

Javaweb11-Filter过滤器

Filter过滤器 1.Filter的基本概念&#xff1a; 在Java Servlet中&#xff0c;Filter接口是用来处理HttpServletRequest和HttpServletResponse的对象的过滤器。主要用途是在请求到达Servlet之前或者响应离开Servlet之前对请求或响应进行预处理或后处理。 2.Filter常见的API F…...

【AI-7】CUDA

CUDA&#xff08;Compute Unified Device Architecture&#xff09;是NVIDIA公司开发的一种并行计算平台和编程模型&#xff0c;使开发者能够利用NVIDIA GPU的强大计算能力来加速各种应用。以下是关于CUDA的详细介绍&#xff1a; CUDA的特点 并行计算&#xff1a;CUDA允许开发…...

ctfshow-web入门-文件上传(web164、web165)图片二次渲染绕过

web164 和 web165 的利用点都是二次渲染&#xff0c;一个是 png&#xff0c;一个是 jpg 目录 1、web164 2、web165 二次渲染&#xff1a; 网站服务器会对上传的图片进行二次处理&#xff0c;对文件内容进行替换更新&#xff0c;根据原有图片生成一个新的图片&#xff0c;这样…...

基于实现Runnable接口的java多线程

Java多线程通常可以通过继承Thread类或者实现Runnable接口实现。本文主要介绍实现Runnable接口的java多线程的方法, 并通过ThreadPoolTaskExecutor调用执行&#xff0c;以及应用场景。 一、应用场景 异步、并行、子任务、磁盘读写、数据库查询、网络请求等耗时操作等。 以下…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...