Jackson 各种注解使用示例

参考资料

  1. Jackson使い方メモ

目录

  • 一. @JsonIgnore
  • 二. @JsonIgnoreProperties
  • 三. @JsonProperty
    • 3.1 作用于entity属性上,指定json对象属性名
    • 3.2 作用于entity方法上,指定json对象属性名
  • 四. @JsonFormat
    • 4.1 日期格式化
    • 4.2 数字格式化
    • 4.3 枚举类返回code
  • 五. @JsonCreator注解 枚举类接收前台提交数据
    • 5.1 枚举类和接收数据entity的定义
    • 5.2 后台枚举类接收前台的数据
    • 5.3 后台枚举类型的数据返回给前台
  • 六. @JsonAlias
  • 七. @JsonInclude


一. @JsonIgnore

  • 在序列化和反序列化 JSON 数据时,忽略指定的属性。
import com.fasterxml.jackson.annotation.*;
import lombok.Data;@Data
public class Test34Entity {@JsonIgnoreprivate String id;private String name;private String content;
}
  • 返回数据给前台
@PostMapping("/get_data")
public ResponseEntity<Test34Entity> getData(@RequestBody Test34Entity data) {Test34Entity entity  = new Test34Entity();// 在此处设定了id属性entity.setId("1355930");entity.setName("贾飞天");entity.setContent("内容");return ResponseEntity.ok(entity);
}

⏹由于给id属性添加了@JsonIgnore注解,所以id并没有返回给前台。

在这里插入图片描述


二. @JsonIgnoreProperties

  • 同时指定多个需要忽略的属性
import com.fasterxml.jackson.annotation.*;
import lombok.Data;@Data
@JsonIgnoreProperties({"id", "content"})
public class Test34Entity {private String id;private String name;private String content;
}

⏹可以看到,因为id和content属性被忽略,所以只有name属性被返回到了前台。

在这里插入图片描述


三. @JsonProperty

3.1 作用于entity属性上,指定json对象属性名

⏹由下图可知,当前台json的属性值和后台实体类属性值不匹配时,可使用@JsonProperty指定

在这里插入图片描述

3.2 作用于entity方法上,指定json对象属性名

⏹部分属性值,后台需要根据既存的属性经过业务判断处理后返回前台,且该属性值最终只有前台需要,后台的业务逻辑中并不需要,此时可以将@JsonProperty注解作用于方法上,用来指定该属性

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;import java.util.Optional;@Data
public class Test34Entity {private String firstName;private String lastName;// 后台不需要该属性,只有前台才需要此属性// private String fullName;// 指定该方法的返回值作为json的属性,属性名为fullname@JsonProperty("fullName")private String getFullName() {return Optional.ofNullable(this.firstName).orElse("") + Optional.ofNullable(this.lastName).orElse("");}
}

⏹如下图所示,在返回给前台的时候,fullName也被返回。

在这里插入图片描述


四. @JsonFormat

4.1 日期格式化

  • 在Date和YearMonth属性上指定日期字符串的格式
import com.fasterxml.jackson.annotation.*;
import lombok.Data;import java.time.YearMonth;
import java.util.Date;@Data
public class Test34Entity {@JsonFormat(pattern = "yyyy/MM/dd")private Date birthday;@JsonFormat(pattern = "yyyy/MM")private YearMonth yearMonth;
}

⏹由下图可知,日期字符串转换为java实体类中的日期属性类型

在这里插入图片描述

4.2 数字格式化

  • 指定序列化时的数据类型(返回前台的数据类型)
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;import java.math.BigDecimal;@Data
public class Test34Entity {// 指定序列化时的数据类型是字符串@JsonFormat(shape = JsonFormat.Shape.STRING)private BigDecimal num1;@JsonFormat(shape = JsonFormat.Shape.STRING)private Integer num2;// 未指定序列化时的数据类型private BigDecimal num3;private Integer num4;
}

⏹可以看到,指定了 @JsonFormat(shape = JsonFormat.Shape.STRING)注解的属性,返回前台时的数据类型变为字符串类型。

在这里插入图片描述

4.3 枚举类返回code

详情请参考 5.3 后台枚举类型的数据返回给前台

五. @JsonCreator注解 枚举类接收前台提交数据

5.1 枚举类和接收数据entity的定义

⏹定义一个枚举类

  • Jackson根据@JsonCreator注解所作用的枚举类中的方法,将前台提交的数据转换为枚举类对象
  • fromName方法只是为了根据枚举类的name获取枚举类对象,和枚举类序列化反序列化没有关系
import com.fasterxml.jackson.annotation.JsonCreator;
import java.util.Arrays;public enum SexTypes {男性("1"),女性("2"),保密("3");private String code;SexTypes(String code) {this.code = code;}public String getCode() {return code;}/*根据code获取枚举类对象SpringBoot在将前台数据封装的时候,通过@JsonCreator注解对应的方法指定前台的性别code转换为对应的枚举类*/ @JsonCreatorpublic static SexTypes fromCode(String code) {return Arrays.stream(SexTypes.values()).filter(item -> item.code.equals(code)).findAny().orElse(null);}public static SexTypes fromName(String name) {return Arrays.stream(SexTypes.values()).filter(item -> item.name().equals(name)).findAny().orElse(null);}
}

⏹用来接收前台提交到后台数据的entity

import com.example.jmw.common.enums.SexTypes;
import lombok.Data;@Data
public class Test34Entity {private String id;// 自定义的枚举类private SexTypes sexTypes;
}

5.2 后台枚举类接收前台的数据

在这里插入图片描述

5.3 后台枚举类型的数据返回给前台

⏹在不做任何配置的情况下,默认返回前台的数据是枚举类的名称

在这里插入图片描述
⏹在枚举类上配置@JsonFormat(shape = JsonFormat.Shape.OBJECT),返回给前台的是枚举类的code

@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum SexTypes {男性("1"),女性("2"),保密("3");// ...以下代码省略...@JsonCreatorpublic static SexTypes fromCode(String code) {return Arrays.stream(SexTypes.values()).filter(item -> item.code.equals(code)).findAny().orElse(null);}
}

⏹效果如下所示,返回的是枚举类的code

在这里插入图片描述


六. @JsonAlias

  • 作用于实体类的属性上
  • 被标记的属性可以同时接受多个指定的key
import com.fasterxml.jackson.annotation.JsonAlias;
import lombok.Data;@Data
public class Test34Entity {// id 和 userId 都将被封装到此处@JsonAlias({"userId"})private String id;@JsonAlias({"userName"})private String name;
}

⏹效果如下所示,前台json中的key是userId,后台entity的属性值是id,但是通过@JsonAlias注解指定了别名userId,所以成功接受到数据。

在这里插入图片描述

七. @JsonInclude

  • JsonInclude.Include.NON_NULL:指定返回的数据中仅包含非null的数据
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Test34Entity {private String id;private String name;private String content;
}

⏹由下图可知,content属性为null,但是因为通过@JsonInclude(JsonInclude.Include.NON_NULL)的指定,所以值为null的属性压根就没有返回到前台。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Open CASCADE学习|平面上的PCurve

曲面上的曲线PCurve&#xff0c;字面上理解即为参数曲线(Parametric Curve)。在几何建模中&#xff0c;PCurve通常被描述为附加在参数曲面之间公共边上的数据结构。从更具体的定义来看&#xff0c;当给定一个曲面方程&#xff0c;并且其参数u和v是另一个参数t的函数时&#xff…

Redis数据库的简介、部署及常用命令

关系数据库与非关系型数据 关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。sQL语句&#xff08;标准数据查询语言&#xff09;就是一种基于关系型数据库的语言&#xff0c…

HarmonyOS NEXT应用开发之Environment:设备环境查询

开发者如果需要应用程序运行的设备的环境参数&#xff0c;以此来作出不同的场景判断&#xff0c;比如多语言&#xff0c;暗黑模式等&#xff0c;需要用到Environment设备环境查询。 Environment是ArkUI框架在应用程序启动时创建的单例对象。它为AppStorage提供了一系列描述应用…

wireshark抓包新手使用教程

Wireshark是非常流行的网络封包分析软件&#xff0c;可以截取各种网络数据包&#xff0c;并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括&#xff1a; 1、Wireshark软件下载和安装以及Wireshark主界面介绍。 2、WireShark简单抓包示例。通过该例子学…

20万就想买智能驾驶汽车?!我给你找到了三款车

文 | AUTO芯球 作者 | 雷歌 我都不敢相信&#xff0c;智能驾驶的车型已经这么便宜啦&#xff01; 一年多前&#xff0c;我一个前同事大冤种&#xff0c;还另掏3万多买某个造车新势力品牌的智驾包呢。 现在动不动就全给你标配了。 近的就说刚刚发布的小米SU7标准版&#xf…

962: 括号匹配问题

【学习版】 【C语言】 【C】 #include<iostream>class MyStack { public:struct Node {char val;Node* prev;Node* next;Node(char x) :val(x), prev(NULL),next(NULL) {};};MyStack() {base new Node(0);top base;}bool empty() {return top base;}void push(int …

Mysql底层原理五:如何设计、用好索引

1.索引的代价 空间上的代价 时间上的代价 每次对表中的数据进⾏增、删、改操作时&#xff0c;都需要去修改各个B树索引。⽽且我们讲过&#xff0c;B树每层节点都是按照索引列的值从⼩到⼤的顺序排序⽽组成了双 向链表。不论是叶⼦节点中的记录&#xff0c;还是内节点中的记录&a…

vue 中使 date/time/datetime 类型的 input 支持 placeholder 方法

一般在开发时&#xff0c;设置了 date/time/datetime 等类型的 input 属性 placeholder 提示文本时&#xff0c; 发现实际展示中却并不生效&#xff0c;如图&#xff1a; 处理后效果如图&#xff1a; 处理逻辑 判断表单项未设置值时&#xff0c;则设置其伪类样式&#xff0c;文…

深度学习基础之一:机器学习

文章目录 深度学习基本概念(Basic concepts of deep learning)机器学习典型任务机器学习分类 模型训练的基本概念基本名词机器学习任务流程模型训练详细流程正、反向传播学习率Batch size激活函数激活函数 sigmoid 损失函数MSE & M交叉熵损失 优化器优化器 — 梯度下降优化…

IVS模型解释

核心思路 【Implied volatility surface predictability: The case of commodity markets】 半参数化模型&#xff1a;利用各种参数(或者因子)对隐含波动率进行降维&#xff08;静态参数化因子模型&#xff09;&#xff0c;对参数化因子的时间序列进行间接的建模 基于非对称…

未来的技术发展趋势

文章目录 前言一、人工智能技术势必聚焦安全能力二、单云环境逐渐让位于多云环境三、后量子密码或将在美大范围普及总结前言 2023 年,与网络空间安全息息相关的人工智能等技术发展迅猛,新的信息安全时代已然拉开大幕。在目睹了 ChatGPT、“星链”和量子通信等技术展现出的巨…

RocketMQ笔记(七)SpringBoot整合RocketMQ发送事务消息

目录 一、简介1.1、流程图1.2、事务消息流程介绍 二、Maven依赖三、生产者3.1、application配置3.2、员工表3.3、实体3.4、持久层3.5、监听器 四、测试4.1、普通消息4.2、事务消息4.2.1、消费者4.2.2、正常提交4.2.3、异常提交 五、其他5.1、接口说明5.2、checkLocalTransactio…

解决Xshell连接Linux虚拟机速度慢问题

我们频繁更换网络环境时&#xff0c;可能会发现xshell连接Linux虚拟机的速度变得很慢 为什么呢&#xff1f; 因为ssh的服务端在连接时会自动检测dns环境是否一致导致的 我们把它修改为不检测即可 修改文件位置&#xff1a; vi /etc/ssh/sshd_config 把 #UseDNS yes 修改…

有关介绍CVPR‘2024工作《持续学习的无干扰低秩适应》正式实施

一个不知名大学生&#xff0c;江湖人称菜狗 original author: Jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2024.04.03 Last edited: 2024.04.03 代码&#xff1a;GitHub - liangyanshuo/InfLoRA&#xff1a;CVPR2024 工作 Interference-Free Low-Rank A…

LeetCode-热题100:240. 搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a; matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[…

2014最新AI智能系统ChatGPT网站源码+Midjourney绘画网站源码+搭建部署教程文档

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

图书馆自助借书机怎么借书

图书馆自助借书机借书流程如下&#xff1a; 1. 找到图书馆自助借书机&#xff0c;在机器上选择借书功能。 2. 输入自己的借书卡号或者身份证号码&#xff0c;如果是第一次借书&#xff0c;可能需要进行注册。 3. 输入图书的条形码号码&#xff0c;可以通过扫描条形码或者手动输…

Hybrid混合开发 和 Android平台JSBridge的原理

书接上篇&#xff1a;移动端研发技术的进化历程 纯原生开发主要面临动态化和开发成本两个问题&#xff0c;而针对这两个问题&#xff0c;诞生了一些跨平台的动态化框架。 针对原生开发面临的问题&#xff0c;业界一直都在努力寻找好的解决方案&#xff0c;而时至今日&#xf…

【Shell语言学堂】Shell 脚本练习1

Shell 脚本练习 shell语言实战 Shell 脚本练习&#x1f4a7;CSDN划过手的泪滴t现有一个脚本可传入n个参数&#xff0c;要求在脚本中实现在终端输出第n个参数之前的所有参数(不包含第n个参数)编写一个计算bmi体质指数的脚本&#xff0c;该脚本需要用户输入身高和体重信息&#x…

机器人客户端如何配置同步消息至多个群中

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 由于微信群的人数&#xff0c;最多是500人&#xff0c;如果有人的业务做的大&#xff0c;可能会同步创建好多个群&#xff0c;但是资料的不想多个群一起发&#xff0c;发给某个群&a…