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

Java中对消息序列化和反序列化并且加入到Spring消息容器中

--- 参考项目:苍穹外卖。

在对没有Java中的数据序列化时,比如说时间格式:

时间的格式是这种没有格式化的效果,因为在给前端返回数据时,返回的结果并没有序列化。

所以,需要对返回的数据序列化。

首先需要在WebMvcConfiguration配置类中对 “ WebMvcConfigurationSupport”进行一个扩展。

/*** 扩展SpringMvc框架消息转化器* @param converters*/@Overrideprotected void extendMessageConverters(List<HttpMessageConverter<?>> converters){log.info("扩展消息转化器...");// 创建一个消息转换器对象MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();// 需要为消息转换器设置一个对象转换器:对象转换器可以将Java对象序列化为Json数据converter.setObjectMapper(new JacksonObjectMapper());// 将自己的消息转化器加入容器(springMvc)中converters.add(0,converter);}

其中对需要对extendMessageConverters这个方法进行一个重写:

        extendMessageConverters是继承SpringMVC消息转化器的。消息转换器是Spring MVC用于将HTTP请求和响应主体(body)转换为Java对象和字符串的组件。

然后创建一个自定义消息转换器对象,MappingJackson2HttpMessageConverter,目的是为了将我们自己写的序列化类放进框架中的消息转换器中。

JacksonObjectMapper是我们序列化和反序列化的的类:

package com.sky.json;import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;/*** 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象* 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]* 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]*/
public class JacksonObjectMapper extends ObjectMapper {public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";//public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm";public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";public JacksonObjectMapper() {super();//收到未知属性时不报异常this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);//反序列化时,属性不存在的兼容处理this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);SimpleModule simpleModule = new SimpleModule().addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))).addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))).addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))).addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))).addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))).addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));//注册功能模块 例如,可以添加自定义序列化器和反序列化器this.registerModule(simpleModule);}
}

最后通过消息转化器的add方法将自定义的序列化方法放进去。通过

converters.add(0,converter)中的index也就是第一个参数,是为了让我们自定义的消息转化器进行第一个执行。

相关文章:

Java中对消息序列化和反序列化并且加入到Spring消息容器中

--- 参考项目&#xff1a;苍穹外卖。 在对没有Java中的数据序列化时&#xff0c;比如说时间格式&#xff1a; 时间的格式是这种没有格式化的效果&#xff0c;因为在给前端返回数据时&#xff0c;返回的结果并没有序列化。 所以&#xff0c;需要对返回的数据序列化。 首先需…...

FFmpeg源码:av_base64_decode函数分析

一、引言 Base64&#xff08;基底64&#xff09;是一种基于64个可打印字符来表示二进制数据的表示方法。由于log2 646&#xff0c;所以每6个比特为一个单元&#xff0c;对应某个可打印字符。3个字节相当于24个比特&#xff0c;对应于4个Base64单元&#xff0c;即3个字节可由4个…...

【后端面试总结】mysql的group by怎么用

GROUP BY 是 SQL 中的一种用于对结果集进行分组的子句&#xff0c;常与聚合函数&#xff08;如 COUNT()、SUM()、AVG()、MAX() 和 MIN() 等&#xff09;一起使用。GROUP BY 的作用是基于一个或多个列对查询结果进行分组&#xff0c;然后可以对每个分组执行聚合操作。 以下是 G…...

计算机视觉和图像处理

计算机视觉与图像处理的最新进展 随着人工智能技术的飞速发展&#xff0c;计算机视觉和图像处理作为其中的重要分支&#xff0c;正逐步成为推动科技进步和产业升级的关键力量。 一、计算机视觉的最新进展 计算机视觉&#xff0c;作为人工智能的重要分支&#xff0c;主要研究如…...

一文读懂Python之random模块(31)

random模块是Python的内置标准库&#xff0c;用于生成各类随机数&#xff0c;可以用作生成网站初始登录密码和随机验证码。 一、random模块简介 random模块可以生成随机数&#xff0c;包括随机整数、浮点数、随机元素等。 二、random模块相关概念 随机数&#xff1a; 是指在…...

p1044 栈

两种递推细节不同 1,将1和n在序列末尾的情况单独放出来处理&#xff0c;因为dp[0]0&#xff1b; 2,将所有情况统一处理&#xff0c;这种情况就要要求dp[1]1; 这里的n在解题中可以看做是元素数量 思路是&#xff0c;根据出栈最后一个元素,统计它前面的元素数量的输出序列数和…...

吴恩达深度学习——超参数调试

内容来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习所用。 文章目录 超参数调试调试选择范围 Batch归一化公式整合 Softmax 超参数调试 调试 目前学习的一些超参数有学习率 α \alpha α&#xff08;最重要&#xff09;、动量梯度下降法 β \bet…...

SQL NOW() 函数详解

SQL NOW() 函数详解 引言 在SQL数据库中&#xff0c;NOW() 函数是一个常用的日期和时间函数&#xff0c;用于获取当前的时间戳。本文将详细介绍 NOW() 函数的用法、参数、返回值以及在实际应用中的注意事项。 函数概述 NOW() 函数返回当前的日期和时间&#xff0c;格式为 Y…...

【JAVA基础】双亲委派

双亲委派可以简单理解为, 当收到加载请求时, 会依次向上加载 ; 只有当父类加载器无法完成加载请求时&#xff0c;子类加载器才会尝试自己去加载。 工作原理 类加载请求传递&#xff1a;当应用程序需要加载一个类时&#xff0c;比如通过ClassLoader.loadClass()方法&#xff0…...

刷题记录 HOT100回溯算法-6:79. 单词搜索

题目&#xff1a;79. 单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻…...

JavaScript系列(52)--编译优化技术详解

JavaScript编译优化技术详解 &#x1f680; 今天&#xff0c;让我们深入探讨JavaScript的编译优化技术。通过理解和应用这些技术&#xff0c;我们可以显著提升JavaScript代码的执行效率。 编译优化基础概念 &#x1f31f; &#x1f4a1; 小知识&#xff1a;JavaScript引擎通常…...

Ollama+DeepSeek本地大模型部署

1、Ollama 官网&#xff1a;https://ollama.com/ Ollama可以干什么&#xff1f; 可以快速在本地部署和管理各种大语言模型&#xff0c;操作命令和dokcer类似。 mac安装ollama&#xff1a; # 安装ollama brew install ollama# 启动ollama服务&#xff08;默认11434端口&#xf…...

在 WSL2 中重启 Ubuntu 实例

在 WSL2 中重启 Ubuntu 实例&#xff0c;可以按照以下步骤操作&#xff1a; 方法 1: 使用 wsl 命令 关闭 Ubuntu 实例: 打开 PowerShell 或命令提示符&#xff0c;运行以下命令&#xff1a; wsl --shutdown这会关闭所有 WSL2 实例。 重新启动 Ubuntu: 再次打开 Ubuntu&#x…...

【ts + java】古玩系统开发总结

src别名的配置 开发中文件和文件的关系会比较复杂&#xff0c;我们需要给src文件夹一个别名吧 vite.config.js import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path// https://vitejs.dev/config/ export default defineConfig({pl…...

机器学习周报-文献阅读

文章目录 摘要Abstract 1 相关知识1.1 WDN建模1.2 掩码操作&#xff08;Masking Operation&#xff09; 2 论文内容2.1 WDN信息的数据处理2.2 使用所收集的数据构造模型2.2.1 Gated graph neural network2.2.2 Masking operation2.2.3 Training loss2.2.4 Evaluation metrics 2…...

LabVIEW微位移平台位移控制系统

本文介绍了基于LabVIEW的微位移平台位移控制系统的研究。通过设计一个闭环控制系统&#xff0c;针对微位移平台的通信驱动问题进行了解决&#xff0c;并提出了一种LabVIEW的应用方案&#xff0c;用于监控和控制微位移平台的位移&#xff0c;从而提高系统的精度和稳定性。 项目背…...

fpga系列 HDL:XILINX Vivado ILA FPGA 在线逻辑分析

ILA为内置逻辑分析仪&#xff0c;通过JTAG与FPGA连接&#xff0c;程序在真实硬件中运行&#xff0c;功能类似Quaruts的SignalTap II 。 ip创建ila 使用ila ip核 timescale 1ns / 1ps module HLSLED(input wire clk ,input wire rst_n ,output wire led);// reg led_o_i 1…...

刷题记录 贪心算法-2:455. 分发饼干

题目&#xff1a;455. 分发饼干 难度&#xff1a;简单 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&a…...

Android --- CameraX讲解

预备知识 surface surfaceView SurfaceHolder surface 是什么&#xff1f; 一句话来说&#xff1a; surface是一块用于填充图像数据的内存。 surfaceView 是什么&#xff1f; 它是一个显示surface 的View。 在app中仍在 ViewHierachy 中&#xff0c;但在wms 中可以理解为…...

ElasticSearch view

基础知识类 elasticsearch和数据库之间区别&#xff1f; elasticsearch&#xff1a;面向文档&#xff0c;数据以文档的形式存储&#xff0c;即JSON格式的对象。更强调数据的搜索、索引和分析。 数据库&#xff1a;更侧重于事务处理、数据的严格结构化和完整性&#xff0c;适用于…...

深入Transformer内部:LoRA到底改动了哪部分权重才让模型“学会”新任务?

深入Transformer内部&#xff1a;LoRA如何通过低秩更新重塑大模型能力 在自然语言处理领域&#xff0c;大型预训练模型的微调一直是个计算密集型任务。传统全参数微调需要更新数十亿甚至数千亿参数&#xff0c;这对大多数研究者和企业来说都是难以承受的负担。低秩适应(LoRA)技…...

ViGEmBus终极指南:Windows游戏控制器模拟驱动完全解析

ViGEmBus终极指南&#xff1a;Windows游戏控制器模拟驱动完全解析 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款运行在Windows内核模式的驱…...

Applite:macOS软件管理的最佳图形化方案,告别繁琐命令行

Applite&#xff1a;macOS软件管理的最佳图形化方案&#xff0c;告别繁琐命令行 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 还在为macOS软件安装更新而烦恼吗&#xff1f;…...

3分钟掌握Seraphine:英雄联盟智能助手完全指南

3分钟掌握Seraphine&#xff1a;英雄联盟智能助手完全指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine Seraphine是一款基于英雄联盟官方LCU API开发的智能游戏助手&#xff0c;通过自动BP系统和实时战绩查…...

解放你的游戏时间:三月七小助手——星穹铁道自动化终极指南

解放你的游戏时间&#xff1a;三月七小助手——星穹铁道自动化终极指南 【免费下载链接】March7thAssistant 崩坏&#xff1a;星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 还在为《崩坏&#xff1a;星穹铁道》中重复的…...

SyntaxUI:基于原子设计与Web组件的现代UI库开发实践

1. 项目概述&#xff1a;一个为开发者而生的现代UI组件库 如果你是一名前端开发者&#xff0c;或者正在构建一个需要用户界面的应用&#xff0c;那么你肯定经历过这样的场景&#xff1a;为了一个按钮的样式、一个表格的交互&#xff0c;或者一个模态框的动画&#xff0c;反复在…...

符号链接批量管理工具 linko:声明式配置与自动化实践

1. 项目概述与核心价值最近在折腾一些自动化脚本和工具链&#xff0c;发现一个挺有意思的仓库&#xff1a;monsterxx03/linko。乍一看这个名字&#xff0c;你可能会有点懵&#xff0c;这到底是干嘛的&#xff1f;是链接管理工具&#xff0c;还是某种网络代理的客户端&#xff1…...

Grad-CAM实战:用热力图透视神经网络的决策焦点

1. Grad-CAM技术初探&#xff1a;为什么我们需要热力图&#xff1f; 当你训练了一个图像分类模型&#xff0c;准确率高达95%&#xff0c;但你真的了解它是如何做出判断的吗&#xff1f;我曾在项目中遇到过这样的尴尬&#xff1a;模型把一只坐在草地上的哈士奇误判为"狼&qu…...

ViewTurbo:基于响应式依赖追踪的前端渲染优化方案

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目&#xff0c;叫 ViewTurbo。这名字听起来就带点“涡轮增压”的劲儿&#xff0c;事实上&#xff0c;它也确实是一个旨在为视图渲染“加速”的工具。简单来说&#xff0c;ViewTurbo 的核心目标&#xff0c;是解决在复杂前端…...

基于WLED分段功能与激光切割的多层智能艺术灯板制作全攻略

1. 项目概述与核心价值如果你和我一样&#xff0c;对那种能随着音乐呼吸、或者能独立变换不同区域色彩的智能灯光装置着迷&#xff0c;那么你一定会喜欢这个项目。它远不止是把LED灯条粘在板子后面那么简单&#xff0c;而是将激光切割的精密工艺、分层的艺术设计&#xff0c;与…...