SpringBoot使用Jackson序列化反序列化配置

2023-10-30

几种常见方式

1. 全局application配置

常用配置:

spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    serialization: true
    deserialization: true
    default-property-inclusion: non_empty
    parser: true

具体配置详见org.springframework.boot.autoconfigure.jackson.JacksonProperties

2. 重新注入ObjectMapper

Jackson配置:
@ConditionalOnClass(ObjectMapper.class)
public class JacksonAutoConfiguration {…}

例:

    @Bean
    @Primary
	@ConditionalOnMissingBean(ObjectMapper.class)
	public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
		ObjectMapper objectMapper = builder.createXmlMapper(false).build();
		// 属性为”“或null时不序列化。
		objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
		// 允许未知属性
		objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
		objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
		objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
		// 字段保留, 讲null转为”“
		objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
			@Override
			public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
				gen.writeString("");
			}
		});
		return objectMapper;
	}

3. 自定义MappingJackson2HttpMessageConverter

    @Bean
	public MappingJackson2HttpMessageConverter converter() {
		MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
		ObjectMapper objectMapper = new ObjectMapper();
		JavaTimeModule timeModule = new JavaTimeModule();
		timeModule.addSerializer(Date.class, new DateSerializer(false, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")));
		timeModule.addDeserializer(Date.class, new DateDeserializers.DateDeserializer());
		timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
		timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
		timeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
		timeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
		objectMapper.registerModule(timeModule);
		objectMapper.configure(JsonGenerator.Feature.IGNORE_UNKNOWN, true);
		objectMapper.configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN, true);
		objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);	// 未知属性
		objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
		objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_VALUES, false);
		messageConverter.setObjectMapper(objectMapper);
		return messageConverter;
	}

 

附: 使用RestTemplate调用外部接口序列化配置

注入上面配置好的MappingJackson2HttpMessageConverter再构造template即可。

    @Resource
	private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;    

    @Bean
	public RestTemplate restTemplate() {
		// 使用restTemplate调用外部接口使用自定义配置的jackson序列化和反序列化。 (忽略不存在的字段,忽略属性大小写)
		return new RestTemplate(Collections.singletonList(mappingJackson2HttpMessageConverter));
	}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot使用Jackson序列化反序列化配置 的相关文章

  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 部署示例 Spring Web MVC 项目

    我是 Tomcat Maven 和 Spring Web MVC 准确地说是框架 v3 的新手 我试图建立example https anonsvn springframework org svn spring samples 项目mvc
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • 为什么 java 编译器不报告 Intellij 中多播表达式的未经检查的强制转换警告?

    为什么下面的代码没有报告 Intellij IDEA 的未经检查的警告jdk 1 8 0 121自从Supplier
  • 如何在 JSP 中导入类?

    我是一个完全的JSP初学者 我正在尝试使用java util List在 JSP 页面中 我需要做什么才能使用除以下类之外的类java lang 使用以下导入语句进行导入java util List 顺便说一句 要导入多个类 请使用以下格式
  • 在 ContainerRequestFilter 中填充 spring request 作用域 bean

    我使用 jersey 1 13 和 spring 3 1 1 编写了一个在 tomcat 6 上运行的休息服务 在 tomcat 中 我使用一个领域来进行身份验证 在我的应用程序中 我需要当前用户 但我不想从每个资源中的球衣访问Securi
  • 带有 @RequestBody 的 Spring 多部分文件

    我正在尝试将数据从应用程序上传到 Spring 后端服务 要上传的内容是一个 DataModel 其中包含要创建的对象的数据以及链接到该数据的多个图像 因此我使用这个方法签名 RequestMapping method RequestMet
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 如何将 android.net.Uri 转换为 java.net.URL? [复制]

    这个问题在这里已经有答案了 有没有办法从Uri to URL 我正在使用的库需要这个 它only接受一个URL但我需要在我的设备上使用图像 如果该方案的Uri is http or https new URL uri toString 应该
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • 具有共享依赖项的多模块项目的 Gradle 配置

    使用 gradle 制作第一个项目 所以我研究了 spring gradle hibernate 项目如何组织 gradle 文件 并开始制作自己的项目 但是 找不到错误 为什么我的配置不起作用 子项目无法解决依赖关系 所以项目树 Root
  • Java:正则表达式排除空值

    在问题中here https stackoverflow com questions 51359056 java regexp for a separated group of digits 我得到了正则表达式来匹配 1 到 99 之间的一
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 如何将使用消息侦听器接收到的 JMS 消息转换为域对象

    我在用 春季3 1 1 ActiveMQ 5 6 0 我有两个 JMS 应用程序 应用程序 A 使用 JmsTemplate 使用 jmsTemplate convertAndSend msg 发送域对象 App B 使用消息监听器并注册了
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • 为什么java中的for-each循环中需要声明变量

    for 每个循环的通常形式是这样的 for Foo bar bars bar doThings 但如果我想保留 bar 直到循环结束 我可以not使用 foreach 循环 Foo bar null Syntax error on toke
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A

随机推荐

  • QList(增删改查)示例

    特点 支持随机访问 其界面也是基于索引的 在中间的任意一端插入或移除项都是非常快速的 注 访问QList中的值时 尽量采用value int i 因为value查不到此值时会返回一个默认值0 而at int i 则会引起崩溃 并且at返回的
  • QT字符串以16进制接收再转化为固定位数的二进制(QT系列11)

    代码 bool OK QString str 1E QString str1 16进制转化 int val str toInt OK 16 qDebug lt
  • GitHub Copilot 体验

    LHS 475 b NASA s Webb Confirms Its First Exoplanet NASA 介绍 什么是GitHub Copilot GitHub Copilot是由GitHub和OpenAI公司共同开发的基于云的AI编
  • Volatile的其他特性

    2 1 volatile总体概览 在上一节中 我们已经研究完了volatile可以实现并发下共享变量的可见性 volatile除了保证可见性外 volatile还具备如下一些突出的特性 volatile的原子性问题 volatile不能保证
  • 编写程序对给定的有向图(不一定连通)进行深度优先遍历_TypeScript 实战算法系列(七):实现图的遍历...

    本文由图雀社区认证作者 神奇的程序员 写作而成 图雀社区将连载其TypeScript 实战算法系列 点击阅读原文查看作者的掘金链接 感谢作者的优质输出 让我们的技术世界变得更加美好 前言 有一个图 我们想访问它的所有顶点 就称为图的遍历 遍
  • JSBinding iOS与JS交互(When-iOS-loves-JS)

    What s JSBinding It s Not Hybrid It s NOT a new technology JSBinding 绑定JS和Native JSBinding和HyBrid的对比 原生OC语音和脚本JS语言对比 API
  • v-html 不识别\n解决方法

    在 html 中的一些特殊场景中需要某一段文字遇到 n 就行换行 但是往往加了后没有效果 那是因为html标签不识别 n 认为 n 只是一个普通的文本 解决这种问题通常有以下几种方案 1 利用正则将html的 n换成 br div div
  • Kafka接入

    Kafka接入 1 引入依赖
  • php实现完整区块链,PHP实现区块链BlockChain

    Block Struct class block private index private timestamp private data private previous hash private random str private h
  • 使用zabbix监控avamar【二】

    1 在 使用zabbix监控avamar 一 中介绍了如何设置avamar端 并发送测试消息 本篇将介绍如何在zabbix server端进行配置 2 在zabbix server的snmp trap日志文件中查找刚上传的报警信息 可以看到
  • Js实现复杂计算和简单运算,以及函数传递任意多个参数的参数的方法

    1 实现复杂运算可以通过调用eval 方法进行计算 获取结果 使用eval string 方法 内部对象是string let a eval 1 2 8 6 2 1 console log a 或者写成 var string 1 2 8 6
  • C++ 输出二进制数

    这几天学组成原理 碰到需要输出二进制数的情况 验证a 2 n a gt gt n 我想用高级语言内在的模块实现 程序如下 bitset后面的 lt gt 中的数字 指定输出的位数 include
  • 2023最新一文学会fastdfs单节点部署(含安装包镜像包)

    1 实验环境 镜像版本 麒麟服务器镜像V10SP2 镜像下载地址 链接 https pan baidu com s 11BopM7FsmvUFud D68J7Rg pwd 1234 提取码 1234 安装包下载地址 链接 https pan
  • Java中Overriding)和Overload是什么意思?

    一 解释 方法覆盖 Overriding 也叫做 方法重写 重写发生在子类和父类之间 具体实现是子类对父类中一个可访问的 Private 修饰的方法不可被继承 方法的重写 保证其方法名参数的个数 参数的类型不变 重载 Overload 发生
  • vim退出编辑模式

    退出vi 末行模式 last line mode 建议在退出vi前 先按ESC键 以确保当前vi的状态为命令方式 然后再键入 冒号 输入下列命令 退出vi 1 w 将编辑缓冲区的内容写入文件 则新的内容就替代了原始文件 这时并没有退出vi
  • 计算机视觉——目标检测、实例分割(语义分割)、人体关键点检测

    计算机视觉 目标检测 实例分割 1 目标检测 2 实例分割 3 人体关键点检测 1 目标检测 一张图片中有多个类别目标 要求不仅仅是对图像目标进行分类 还要准确的标记出目标的位置信息 以提取目标 比如车牌检测 不仅要确定有车牌 还要车牌的准
  • 代码保护软件VMProtect内置脚本的使用——Mach-O文件

    VMProtect是一种很可靠的工具 可以保护应用程序代码免受分析和破解 但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下 才能实现最好的效果 本文继续对VMProtect中强大的内置脚本的使用进行介绍 希望对您有
  • 信息扩散原理及实现(Matlab)

    信息扩散方法是为了弥补信息不足而考虑优化利用样本模糊信息的一种对样本进行集值化的模糊数学处理方法 最原始的形式是信息分配方法 最简单的信息扩散函数是正态扩散函数 信息扩散方法可以将一个分明值的样本点 变成一个模糊集 或者说 是把单值样本点
  • 股权转让要交哪些税?增值税、企业所得税、个人所得税

    转自 https zhuanlan zhihu com p 29750483 股权 股份 股票 这些词儿相信你肯定耳熟能详吧 如果你是第一次产生股权转让或受让的念头 你肯定最先想到股权转让协议 协议的法律问题 转让的流程和工商局需要的材料这
  • SpringBoot使用Jackson序列化反序列化配置

    几种常见方式 1 全局application配置 常用配置 spring jackson date format yyyy MM dd HH mm ss serialization true deserialization true def