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





解决方法:
- 将生成的isReceipt()方法名改成getIsReceipt()
- 在生成的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 优劣对比
-
@JSONField注解的使用方式更加简单,注解默认的值与属性名相同,而@JsonProperty需要手动指定属性名
-
@JSONField注解支持更多的属性映射选项,例如序列化时的日期格式,空值的处理方式等
-
@JSONField注解的性能较快,因为fastjson本身就是一款高性能的JSON处理库
-
在使用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]
- 可见,bean转成json字符串后,@JSONField注解的bean属性名已经替换成了指定属性名:JSONFieldName;
- json字符串转成bean后,@JSONField注解指定的属性名已经替换成了bean属性名:name;
- 测试结果同@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
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一个问题:后端实体类isXXX开头的属性,传到前端后自动去掉is解决方法: JsonProperty和JSONField1.简介2.注解的区别2.1 底层框架不…...
C语言 | Leetcode C语言题解之第221题最大正方形
题目: 题解: 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技术经历数十载的发展,正在加速向各行各业渗透。近年来深度学习加速了人工智能技术的商业化落地的同时,也带来了大量AI算法训练需求,推动AI数据服务市场的快速增长。作为AI快速发展的“基石”,AI数据服务AI数据服务如何驱使AI在…...
户用光伏项目开发流程
1、收集业主信息 管理业主基本信息,包括但不限于联系方式、地址、房屋信息等。 2、业主开卡 每户都需要办理银行卡,用于电费结算和划转。 3、合同签约 业主开卡完成之后,平台方发起签约(支持线上签约),…...
C++ 函数返回值是引用类型使用场景
目录 1、希望返回函数内部的局部静态变量或全局变量 2、希望通过函数返回一个对象的成员变量 3、希望实现链式操作 4、避免对象的拷贝 5、需要注意的事项 在C中,函数的返回值可以是引用类型的情况主要有以下几种: 1、希望返回函数内部的局部静态变…...
CUDA原子操作
代码 #include <cuda_runtime.h> #include <stdio.h>__global__ void atomicAddAndGet(int *result, int *valueToAdd) {// 原子加法int addedValue atomicAdd(result, *valueToAdd);// 通过原子操作后读取值,确保是加法后的值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是一家全球知名的数字证书颁发机构(CA),其提供的SSL证书非常适合企业使用。GeoTrust的SSL证书为企业带来了多重优势,不仅在验证级别、加密强度、兼容性、客户服务等方面表现出色,而且其高性价比和灵活的证书选…...
Kubelet 认证
当我们执行kubectl exec -it pod [podName] sh命令时,apiserver会向kubelet发起API请求。也就是说,kubelet会提供HTTP服务,而为了安全,kubelet必须提供HTTPS服务,且还要提供一定的认证与授权机制,防止任何知…...
aws slb
NLB 目标组 Target is in an Availability Zone that is not enabled for the load balancer 解决: 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,有着诸多不可比拟的优势,比如图片生成、图片内容解析、GPTS开发、更智能的语言理解能力等,但是在国内使用GPT4存在网络及充值障碍等问题,如果您对ChatGPT4.0感兴趣,可以私信博主为您解决账号和环境…...
详解yolov5的网络结构
转载自文章 网络结构图(简易版和详细版) 此图是博主的老师,杜老师的图 网络框架介绍 前言: YOLOv5是一种基于轻量级卷积神经网络(CNN)的目标检测算法,整体可以分为三个部分, ba…...
汽车零配件行业看板管理系统应用
生产制造已经走向了精益生产,计算时效产出、物料周转时间等问题,成为每一个制造企业要面临的问题,工厂更需要加快自动化,信息化,数字化的布局和应用。 之前的文章多次讲解了企业MES管理系统,本篇文章就为大…...
【Go】函数的使用
目录 函数返回多个值 init函数和import init函数 main函数 函数的参数 值传递 引用传递(指针) 函数返回多个值 用法如下: package mainimport ("fmt""strconv" )// 返回多个返回值,无参数名 func Mu…...
宝塔面板运行Admin.net框架
准备 宝塔安装 .netcore安装 Admin.net框架发布 宝塔面板设置 完结撒花 1.准备 服务器/虚拟机一台 系统Windows server / Ubuntu20.04(本贴使用的是Ubuntu20.04版本系统) Admin.net开发框架 先安装好服务器系统,这里就不做安装过程描述了&…...
Javaweb11-Filter过滤器
Filter过滤器 1.Filter的基本概念: 在Java Servlet中,Filter接口是用来处理HttpServletRequest和HttpServletResponse的对象的过滤器。主要用途是在请求到达Servlet之前或者响应离开Servlet之前对请求或响应进行预处理或后处理。 2.Filter常见的API F…...
【AI-7】CUDA
CUDA(Compute Unified Device Architecture)是NVIDIA公司开发的一种并行计算平台和编程模型,使开发者能够利用NVIDIA GPU的强大计算能力来加速各种应用。以下是关于CUDA的详细介绍: CUDA的特点 并行计算:CUDA允许开发…...
ctfshow-web入门-文件上传(web164、web165)图片二次渲染绕过
web164 和 web165 的利用点都是二次渲染,一个是 png,一个是 jpg 目录 1、web164 2、web165 二次渲染: 网站服务器会对上传的图片进行二次处理,对文件内容进行替换更新,根据原有图片生成一个新的图片,这样…...
基于实现Runnable接口的java多线程
Java多线程通常可以通过继承Thread类或者实现Runnable接口实现。本文主要介绍实现Runnable接口的java多线程的方法, 并通过ThreadPoolTaskExecutor调用执行,以及应用场景。 一、应用场景 异步、并行、子任务、磁盘读写、数据库查询、网络请求等耗时操作等。 以下…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
