@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 {

    @Bean
    public HttpMessageConverter configureMessageConverters() {
        FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
        FastJsonConfig config = new FastJsonConfig();
        config.setSerializerFeatures(
                // 保留map空的字段
                SerializerFeature.WriteMapNullValue,
                // 将String类型的null转成""
                SerializerFeature.WriteNullStringAsEmpty,
                // 将Number类型的null转成0
                SerializerFeature.WriteNullNumberAsZero,
                // 将List类型的null转成[]
                SerializerFeature.WriteNullListAsEmpty,
                // 将Boolean类型的null转成false
                SerializerFeature.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;
    }

    @Override
    public 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注解

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/130376.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百度王颖:百度文库以AI创作能力突破语言边界,促进思想碰撞和文化融通

1月9日&#xff0c;2023年世界互联网大会乌镇峰会“网络传播与文明交流互鉴论坛”召开。百度副总裁、互娱和垂类平台负责人王颖出席并发表“以技术搭建跨文化交流桥梁”主题演讲。她表示&#xff0c;在大模型的加持下&#xff0c;百度各个产品都在重构&#xff0c;通过技术助力…

收集不同富文本编辑器的使用(vue3版本)

文章目录 一、ueditor&#xff08;百度富文本编辑器&#xff09;安装使用并二次封装组件 二、KindEditor下载文件新建组件及使用 一、ueditor&#xff08;百度富文本编辑器&#xff09; 参考 ueditor 和 vue-ueditor-wrap 这里直接使用 封装好的vue组件 vue-ueditor-wrap vue3版…

深度学习 python opencv 动物识别与检测 计算机竞赛

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

海康Visionmaster-通讯管理:ModBus 通信发送非整型 数据的方法

Modbus 通信发送数据只能为 Int 类型&#xff0c;如下图所示&#xff1a; 可以发送 Int 和 Float 数据&#xff0c;如下图所示 通信设备配置如下&#xff1a; 发送事件配置如下&#xff1a; 通信管理界面显示有问题&#xff0c;显示为 Int 类型存在一定误导&#xff1b;可以…

Powerpoint不小心被覆盖?PPT误删文件如何恢复?

PowerPoint不小心删除了&#xff0c;这可能是众多学生和工作人员最头痛的事情了。PPT被覆盖或误删可能意味着几个小时的努力付之东流。那么PPT覆盖的文档要如何救回来呢&#xff1f;小编将会在本篇文章中为大家分享几个解决方案&#xff0c;使PPT文档覆盖还原操作成为可能&…

iOS代码混淆和加固技术详解

目录 摘要&#xff1a; 本文介绍了iOS开发中常用的代码混淆和加固技术&#xff0c;包括数据加密、应用加壳和代码混淆。其中&#xff0c;重点讨论了代码混淆的实现方法和注意事项&#xff0c;并推荐了一些相关的工具和库。 引言 代码混淆和加固 数据加密 应用加壳 代码混…

建设大型综合运维平台,对接集成多厂商网管系统

当前&#xff0c;云计算、大数据、人工智能等IT技术迅猛发展&#xff0c;企业的信息化步入了一个崭新的时代&#xff0c;企业规模不断壮大&#xff0c;业务不断拓展&#xff0c;企业信息化依赖的网络结构和IT技术越来越复杂。因建设时期等原因&#xff0c;企业网络中分布着不同…

家庭安全计划 挑战赛| 溺水预防

溺水预防 从了解到行动 家庭安全计划 | 少年急救官 地震避险逃生该怎么做&#xff1f; 起火了该如何应对&#xff1f; 哪些行为容易导致溺水&#xff1f; 家庭风险隐患有哪些&#xff1f; 家庭逃生演练四步骤你会吗&#xff1f; 国际救助儿童会&#xff08;英国&#xff…

2022最新版-李宏毅机器学习深度学习课程-P50 BERT的预训练和微调

模型输入无标签文本&#xff08;Text without annotation&#xff09;&#xff0c;通过消耗大量计算资源预训练&#xff08;Pre-train&#xff09;得到一个可以读懂文本的模型&#xff0c;在遇到有监督的任务是微调&#xff08;Fine-tune&#xff09;即可。 最具代表性是BERT&…

百度智能云正式上线Python SDK版本并全面开源!

文章目录 1. SDK的优势2. 千帆SDK&#xff1a;快速落地LLM应用3. 如何快速上手千帆SDK3.1 SDK快速启动3.2 SDK进阶指引3.3 通过Langchain接入千帆SDK 4. 开源社区 百度智能云千帆大模型平台再次升级&#xff01;在原有API基础上&#xff0c;百度智能云正式上线Python SDK&#…

数据结构-图的遍历

广度优先遍历&#xff08;BFS&#xff09; 树的遍历&#xff1a;不存在“回路”&#xff0c;搜索相邻的结点时&#xff0c;不可能搜到已经访问过的结点 图的遍历&#xff1a;搜索相邻的顶点时&#xff0c;有可能搜到已经访问过的顶点 要点&#xff1a; 找到与一个顶点相邻的所…

[100天算法】-颜色分类(day 69)

题目描述 给定一个包含红色、白色和蓝色&#xff0c;一共 n 个元素的数组&#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。此题中&#xff0c;我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意: 不能使…

在 Arduino IDE 2.0 中安装 ESP32 板(Windows、Mac OS X、Linux)

有一个新的 Arduino IDE——Arduino IDE 2.0&#xff08;测试版&#xff09;。在本教程中&#xff0c;您将学习如何在 Arduino IDE 2.0 中安装 ESP32 板并将代码上传到板。本教程与 Windows、Mac OS X 和 Linux 操作系统兼容。 据 Arduino 网站称&#xff1a;“ Arduino IDE 2.…

CCLink转Modbus TCP网关_MODBUS报文配置

兴达易控CCLink转Modbus TCP网关是一种功能强大的设备&#xff0c;可实现两个不同通信协议之间的无缝对接。它能够将CCLink协议转换为Modbus TCP协议&#xff0c;并通过报文配置实现灵活的通信设置。兴达易控CCLink转Modbus TCP网关可以轻松实现CCLink和Modbus TCP之间的数据转…

如何在 Idea 中修改文件的字符集(如:UTF-8)

以 IntelliJ IDEA 2023.2 (Ultimate Edition) 为例&#xff0c;如下&#xff1a; 点击左上角【IntelliJ IDEA】->【Settings…】&#xff0c;如下图&#xff1a; 从弹出页面的左侧导航中找到【Editor】->【File Encodings】&#xff0c;并将 Global Encoding、Project E…

SDN和NFV笔记

目录 SDN SDN的引入 SDN的概念 SDN网络部署的方式 SDN架构 OpenFlow SDN与传统网络的区别 SDN的应用 SDN的优点 NFV NFV的概念&#xff1a; NFV的架构&#xff1a; NFV相比于传统物理网元&#xff1a; NFV与SDN的关系 NFV与SDN的相似点 NFV与SDN的不同 SDN SD…

贝锐蒲公英智慧运维方案:实现远程网络监控、管理、维护工业设备

为了提升运维效率&#xff0c;能够及时发现和响应设备的故障、异常和潜在问题。 越来越多的企业都在搭建“集中式”的远程智慧运维体系&#xff0c;以提高运维效率和降低成本。 但是&#xff0c;受限于网络&#xff0c;将不同地域的资源和信息进行整合&#xff0c;实现统一管理…

No source control providers registered

使用vscode时碰到这个问题 git扩展没启动

Linux-vi/vim命令

1.vim/vi编辑器的三种工作模式 ①命令模式 ②输入模式 i打开 ③底线命令模式 :打开 2.命令模式 vi 文件路径 vim 文件路径 如果文件不存在则创建新的文件&#xff0c;存在则使用vi/vim打开 3.快捷键 模式命令描述命令模式i在当前光标位置进入输入模式命令模式a在当前光标位置之…

Java11新增特性

前言 在前面的文章中&#xff0c;我们已经介绍了 Java9的新增特性 和 Java10的新增特性 ,下面我们书接上文&#xff0c;来介绍一下Java11的新增特性 版本简介 Java 11 是 Java 平台的最新版本&#xff0c;于2018年9月25日发布。这个版本是自Java 8以来最重要的更新之一&…
最新文章