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

ops/2025/2/2 9:28:01/

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

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

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

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

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

java">/*** 扩展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是我们序列化和反序列化的的类:

java">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也就是第一个参数,是为了让我们自定义的消息转化器进行第一个执行。


http://www.ppmy.cn/ops/154996.html

相关文章

MySQL UNION 操作详解

MySQL UNION 操作详解 引言 在数据库操作中,UNION 是一个非常重要的概念,它允许我们在一个查询中合并多个 SELECT 语句的结果集。UNION 操作通常用于将来自不同表的数据合并在一起,或者将同一表中的数据按照不同的条件进行合并。本文将详细介绍 MySQL 中的 UNION 操作,包…

【PyTorch】5.张量索引操作

目录 1. 简单行、列索引 2. 列表索引 3. 范围索引 4. 布尔索引 5. 多维索引 个人主页&#xff1a;Icomi 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&#xff0c;为构建和训练神经网络提供了高效且灵活的平台。神经网络作为…

python:洛伦兹变换

洛伦兹变换&#xff08;Lorentz transformations&#xff09;是相对论中的一个重要概念&#xff0c;特别是在讨论时空的变换时非常重要。在四维时空的背景下&#xff0c;洛伦兹变换描述了在不同惯性参考系之间如何变换时间和空间坐标。在狭义相对论中&#xff0c;洛伦兹变换通常…

FFmpeg rtmp推流直播

文章目录 rtmp协议RTMP协议组成RTMP的握手过程RTMP流的创建RTMP消息格式Chunking(Message 分块) rtmp服务器搭建Nginx服务器配置Nginx服务器 librtmp库编译推流 rtmp协议 RTMP&#xff08;Real Time Messaging Protocol&#xff09;是由Adobe公司基于Flash Player播放器对应的…

电脑怎么格式化?格式化详细步骤

格式化是我们在日常使用电脑时可能会用到的一种操作&#xff0c;无论是清理磁盘空间、安装新系统&#xff0c;还是解决磁盘读写错误&#xff0c;都可能需要格式化。不过&#xff0c;对于一些不熟悉电脑操作的用户来说&#xff0c;格式化听起来可能有些复杂。其实&#xff0c;只…

Deepseek技术浅析(二):大语言模型

DeepSeek 作为一家致力于人工智能技术研发的公司&#xff0c;其大语言模型&#xff08;LLM&#xff09;在架构创新、参数规模扩展以及训练方法优化等方面都达到了行业领先水平。 一、基于 Transformer 架构的创新 1.1 基础架构&#xff1a;Transformer 的回顾 Transformer 架…

IP服务模型

1. IP数据报 IP数据报中除了包含需要传输的数据外&#xff0c;还包括目标终端的IP地址和发送终端的IP地址。 数据报通过网络从一台路由器跳到另一台路由器&#xff0c;一路从IP源地址传递到IP目标地址。每个路由器都包含一个转发表&#xff0c;该表告诉它在匹配到特定目标地址…

淘宝评论接口item_review实战技巧:如何有效分析用户评价,优化运营策略

在电商领域&#xff0c;用户评价是商家了解产品市场表现、优化运营策略的重要依据。淘宝作为中国最大的电商平台之一&#xff0c;其评论接口item_review为商家提供了丰富的用户评价数据。本文将深入探讨如何有效利用这一接口&#xff0c;分析用户评价&#xff0c;从而优化运营策…