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

@JSONField或@JsonProperty注解使用

一、需求

使用@JSONField或@JsonProperty注解,来解决bean与json字段不一致问题,或者字段定义不符合前端所需要的标准,最近在项目中发现实体类属性中,同时使用了@JSONField和@JsonProperty注解,用于重新声明属性key。有时候注解生效,有时候注解不生效。我很好奇到底是哪个注解生效了,于是进行了各种验证,基本搞明白了。

二、@JsonProperty和@JSONField注解的区别

1.底层框架不同

@JsonProperty 是Jackson实现的
@JSONField 是fastjson实现的

2.用法不同

(1)bean序列化为Json:

@JsonProperty:ObjectMapper().writeValueAsString(Object value)

@JSONField:ObjectMapper().readValue(String content, Class valueType)

(2)Json反序列化为bean:

@JsonProperty:ObjectMapper().readValue(String content, Class valueType)

@JSONField:JSONObject.parseObject(String content, Class valueType)

(3)作用域

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

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

三、pom依赖

         <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency>

四、使用@JsonProperty

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

五、使用@JSONField

必须重写数据解析器,使用fastjson进行序列化和反序列化。配置类如下:

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;/*** @Author: * @Description* @Date: 下午1:59 2023/11/9*/
@Configuration
public class WebMvcConfiguration {@Beanpublic HttpMessageConverter configureMessageConverters() {FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();FastJsonConfig config = new FastJsonConfig();config.setSerializerFeatures(// 保留map空的字段SerializerFeature.WriteMapNullValue,// 将String类型的null转成""SerializerFeature.WriteNullStringAsEmpty,// 将Number类型的null转成0SerializerFeature.WriteNullNumberAsZero,// 将List类型的null转成[]SerializerFeature.WriteNullListAsEmpty,// 将Boolean类型的null转成falseSerializerFeature.WriteNullBooleanAsFalse,// 避免循环引用SerializerFeature.DisableCircularReferenceDetect);converter.setFastJsonConfig(config);converter.setDefaultCharset(Charset.forName("UTF-8"));List<MediaType> mediaTypeList = new ArrayList<>();// 解决中文乱码问题,相当于在Controller上的@RequestMapping中加了个属性produces = "application/json"mediaTypeList.add(MediaType.APPLICATION_JSON);converter.setSupportedMediaTypes(mediaTypeList);return converter;}
}

六、实体类

import com.alibaba.fastjson.annotation.JSONField;
/*** @Author: * @Description* @Date: 上午10:36 2023/11/9*/
public class JSONFieldData {@JSONField(name="my_name")private String name;private String phone;@JSONField(name="my_age")private Integer age;public JSONFieldData() {}public JSONFieldData(String name, String phone, Integer age) {this.name = name;this.phone = phone;this.age = age;}public void setAge(Integer age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public Integer getAge() {return age;}@Overridepublic String toString() {return "JSONFieldData{" +"name='" + name + '\'' +", phone='" + phone + '\'' +", age=" + age +'}';}
}

七、定义controller

import org.springframework.web.bind.annotation.*;/*** @Author: * @Description* @Date: 上午10:42 2023/11/9*/
@RestController
@RequestMapping("/json")
public class JSONFieldApi {@GetMapping("/test1")public Object testJson() {JSONFieldData data = new JSONFieldData();data.setName("cjAqNP");data.setPhone("bdfuNn");data.setAge(399);return data;}@PostMapping("/test2")public Object testJson2(@RequestBody JSONFieldData data) {return data;}}

八、测试@JSONField注解

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

相关文章:

@JSONField或@JsonProperty注解使用

一、需求 使用JSONField或JsonProperty注解&#xff0c;来解决bean与json字段不一致问题&#xff0c;或者字段定义不符合前端所需要的标准&#xff0c;最近在项目中发现实体类属性中&#xff0c;同时使用了JSONField和JsonProperty注解&#xff0c;用于重新声明属性key。有时候…...

高效简洁的文档翻译网站

一款简单而强大的文档翻译网站 一款文字/文件翻译的网站,支持多个领域的翻译&#xff0c;支持常见的语言翻译(韩/日/法/英/俄/德…),最大百分比的保持原文排版(及个别除外基本100%还原)。 新用户注册就有100页的免费额度&#xff0c;每月系统还会随机赠送翻译额度&#xff0c;…...

SpringBoot自动装配定义先后顺序失效原因极其解析

SpringBoot自动装配定义先后顺序失效原因极其解析 1、场景分析1.1、问题总结 2、使用AutoConfigureBefore、AutoConfigureAfter和AutoConfigureOrder注解指定加载顺序2.2、AutoConfigureXX注解失效原因总结 3、使用静态内部装配类提升加载顺序4、bean加载顺序规则 1、场景分析 …...

API 集成测试工具Hitchhiker 0.1.1 正式发布

Hitchhiker 是一款开源的 Restful Api 集成测试工具&#xff0c;你可以在轻松部署到本地&#xff0c;和你的 team 成员一起管理 Api。 能做什么 * Team 协作开发 Api * Api 历史修改记录及支持 diff 展示 * 支持多环境变量及运行时变量 * 支持 Schedule 及批量 run * 不同…...

idea无法下载源码-Cannot download sources

问题&#xff1a; 解决方案&#xff1a;...

docker搭建mysql主从复制

1. 基础环境 环境 名称描述CentOS 7.6Linux操作系统版本docker 20.10.5docker版本mysql 8.0.29mysql镜像版本 节点 节点名称读写/主从地址端口master读节点/主节点192.168.1.6:3306slave1写节点/从节点192.168.1.6:3307slave2写节点/从节点192.168.1.6:3308 2. 主节点 使…...

在MacBook上实现免费的PDF文件编辑

之前我想对PDF文件进行简单处理&#xff08;比如删页面、添空白页、调整页面顺序&#xff09;&#xff0c;要么是开wps会员【花钱贵】&#xff0c;下载&#xff08;盗版&#xff09;Adobe Acrobat【macOS不好下载】&#xff0c;要么用福昕阅览器登陆学生账号&#xff08;学校买…...

QT第2课-GUI程序实例分析

GUI程序开发概述 不同的操作系统GUI开发原理相同不同的操作系统GUI SDK 不同 GUI 程序开发原理 GUI程序在运行时会创建一个消息队列系统内核将用户的键盘鼠标操作翻译成对应的程序消息程序在运行过程中需要实时处理队列中的消息当队列中没有消息时&#xff0c;程序将处于停滞…...

Android修行手册 - POI操作Excel常用样式(字体,背景,颜色,Style)

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…...

Sprint Boot 学习路线 5

Spring MVC Spring MVC是Spring框架的一部分&#xff0c;是一个Web应用程序框架。它旨在使用Model-View-Controller&#xff08;MVC&#xff09;设计模式轻松构建Web应用程序。 在Spring MVC中&#xff0c;应用程序被分为三个主要组件&#xff1a;Model、View和Controller。M…...

git02->gui图形化界面使用,ssh协议,idea集成GIT

gui图形化界面使用ssh协议idea集成GIT 1.gui图形化界面使用 2.ssh协议 git/github生成密钥并通过 操作分为本地电脑配置和github网站配置 第一步&#xff1a;本地电脑配置 右键空白处&#xff0c;选择Git Bash Here打开相关命令窗口 1.配置用户名和邮箱&#xff08;如果已经配…...

面向对象 元类 gil log 协程 垃圾回收 描述符 property

封装、继承、多态 当谈到封装、继承和多态时,通常是在面向对象编程 (OOP) 的上下文中讨论的。 封装 (Encapsulation) 示例: class Person: def __init__(self, name, age): self.__name = name # 使用双下划线前缀将属性变为私有 self.__age = age ​ de…...

bibitem格式 添加参考文献

这次写论文时遇到一种bibitem格式的参考文献&#xff0c;latex中没有bib文件 分三步走 找到这篇文章的Bib Tex的引用&#xff0c;然后新建bib文件&#xff0c;命名为下图&#xff1a; 然后把Bib Tex引用的内容复制到上图的文件中&#xff0c;新建tex文件 内容为 \document…...

Leetcode 2934. Minimum Operations to Maximize Last Elements in Arrays

Leetcode 2934. Minimum Operations to Maximize Last Elements in Arrays 1. 解题思路2. 代码实现 题目链接&#xff1a;2934. Minimum Operations to Maximize Last Elements in Arrays 1. 解题思路 这一题思路上其实很简单&#xff0c;直接分情况考察一下最后一个元素交换…...

02:2440---时钟体系

目录 一:时钟控制 1:基本概念 2:时钟结构图 3:结构图分析 4:总线 5:寄存器 A:FCLK--MPLLCON B:HCLK和PCLK--CLKDIVN C:注意 二:上电复位 1:上电复位 2:时钟选择 三:代码 一:时钟控制 1:基本概念 S3C2440A中的时钟控制逻辑可以产生所需的时钟信号&#xff0c;包括C…...

SOEM源码解析——ecx_siiSM(读取SII的SM信息)

0 工具准备 1.SOEM-master-1.4.0源码1 ecx_siiSM函数总览 /** Get SM data from SII SM section in slave EEPROM.从SII的SM段获取SM信息* @param[in] context = context struct 句柄* @param[in] slave = slave number 从站序号* @param[out] SM = first SM str…...

【见缝插针】射击类游戏-微信小程序项目开发流程详解

还记得小时候玩过的见缝插针游戏吗&#xff0c;比一比看谁插得针比较多&#xff0c;可有趣了&#xff0c;当然了&#xff0c;通过它可以训练自己的手速反应&#xff0c;以及射击水平&#xff0c;把握时机&#xff0c;得分越高就越有成就感&#xff0c;相信小朋友们会喜欢它的&a…...

flutter开发实战-TweenSequence实现动画序列

flutter开发实战-TweenSequence实现动画序列 一、TweenSequence TweenSequence是允许创建一个Animation由一系列补间动画来确定值&#xff0c;每个TweenSequenceItem都有定义在动画的持续时间的权重确定动画间隔。 TweenSequence 动画组类TweenSequenceItem 用来定义每一个动…...

Flowable 外部表单

内置表单需要在每个节点中去配置&#xff0c;当如果多个节点使用同一套表单属性就要配置多次比较麻烦&#xff0c;修改的时候也要修改多次&#xff0c;外部表单可以定义一次&#xff0c;然后其它节点都去引用同一个表单属性。 外部表单需要定义一个.form后缀的文件。 外部表单…...

[mysql]索引优化-2

目录 一、分页查询优化1.根据自增且连续的主键排序的分页查询2.根据非主键字段排序的分页查询 二、Join关联查询优化1.嵌套循环连接 Nested-Loop Join(NLJ) 算法2.基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法 三、count(*)查询优化1.查询mysql自己维护的总行数2.sho…...

别再只盯着Setup/Hold了!聊聊STA里Cell Delay和Net Delay那些‘反常’的负值现象

负延迟现象&#xff1a;STA中Cell Delay与Net Delay的深层解析 在数字集成电路设计中&#xff0c;静态时序分析&#xff08;STA&#xff09;是确保芯片功能正确性的关键环节。大多数工程师对Setup/Hold时间检查已经驾轻就熟&#xff0c;但当我们深入时序模型的细节时&#xff0…...

CenterPoint 模型结构与输出语义解析

本文以地平线 Open Explorer&#xff08;OE&#xff09;中的 CenterPoint 参考算法为主线&#xff0c;系统梳理 CenterPoint 的模型结构设计、Head 与 box 语义拆分方式&#xff0c;以及在工具链中从训练、导出到编译部署的完整工程语义。文末通过 nuScenes → KITTI 的一次实际…...

Jetson Orin NX 实时内核配置:从SDKManager便捷烧录到OTA升级实战

1. Jetson Orin NX实时内核配置的两种路径 第一次接触Jetson Orin NX时&#xff0c;我和很多开发者一样纠结于如何高效配置实时内核。经过多次实践&#xff0c;我发现主要有两种可靠路径&#xff1a;SDKManager一键烧录和OTA升级改造。这两种方式各有优劣&#xff0c;适合不同…...

java进阶-Dubbo

Apache Dubbo 是一款由阿里巴巴开源、Apache 基金会旗下的高性能微服务开发框架。它的核心是为分布式系统提供高效的RPC&#xff08;远程过程调用&#xff09;通信和服务治理能力。简单来说&#xff0c;Dubbo 就像微服务架构的"高速公路"&#xff0c;让一个服务&…...

阿里认领匿名AI视频生成模型,HappyHorse-1.0引发关注

阿里认领匿名AI视频生成模型HappyHorse-1.0近日&#xff0c;引发热议的匿名AI视频生成模型HappyHorse-1.0被阿里巴巴认领。阿里ATH方面确认&#xff0c;该模型由旗下创新事业部研发&#xff0c;目前正处于内测阶段&#xff0c;并计划于近期开放API。这一消息的公布&#xff0c;…...

为什么要做 GeoPipeAgent沉

指令替换 项目需求&#xff1a;将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一&#xff0c;测试代码示例 test.c // test.c #includ…...

基于File-Based App开发MVP项目母

Issue 概述 先来看看提交这个 Issue 的作者是为什么想到这个点子的&#xff0c;以及他初步的核心设计概念。?? 本 PR 实现了 Apache Gravitino 与 SeaTunnel 的集成&#xff0c;将其作为非关系型连接器的外部元数据服务。通过 Gravitino 的 REST API 自动获取表结构和元数据&…...

Hermes Agent 完整知识总结与使用教程

Hermes Agent 完整知识总结与使用教程项目地址: https://github.com/NousResearch/hermes-agent 官方文档: https://hermes-agent.nousresearch.com/docs一、项目概述 1.1 Hermes Agent 是什么&#xff1f; Hermes Agent 是由 Nous Research 构建的开源自我改进型 AI 智能体。它…...

PyCharm 2023最新汉化指南:一键切换中文开发环境

1. PyCharm 2023中文界面一键配置指南 刚接触Python开发的朋友们&#xff0c;第一次打开PyCharm可能会被满屏的英文吓到。别担心&#xff0c;JetBrains早就考虑到了这个问题&#xff0c;从2020版开始就提供了官方中文语言包。2023年的最新版本更是优化了汉化体验&#xff0c;整…...

如何快速从Google Drive下载共享文件:Python极简指南

如何快速从Google Drive下载共享文件&#xff1a;Python极简指南 【免费下载链接】google-drive-downloader Minimal class to download shared files from Google Drive. 项目地址: https://gitcode.com/gh_mirrors/go/google-drive-downloader Google Drive作为最常用…...