当前位置: 首页 > 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也就是第一个参数,是为了让我们自定义的消息转化器进行第一个执行。

http://www.lryc.cn/news/530179.html

相关文章:

  • FFmpeg源码:av_base64_decode函数分析
  • 【后端面试总结】mysql的group by怎么用
  • 计算机视觉和图像处理
  • 一文读懂Python之random模块(31)
  • p1044 栈
  • 吴恩达深度学习——超参数调试
  • SQL NOW() 函数详解
  • 【JAVA基础】双亲委派
  • 刷题记录 HOT100回溯算法-6:79. 单词搜索
  • JavaScript系列(52)--编译优化技术详解
  • Ollama+DeepSeek本地大模型部署
  • 在 WSL2 中重启 Ubuntu 实例
  • 【ts + java】古玩系统开发总结
  • 机器学习周报-文献阅读
  • LabVIEW微位移平台位移控制系统
  • fpga系列 HDL:XILINX Vivado ILA FPGA 在线逻辑分析
  • 刷题记录 贪心算法-2:455. 分发饼干
  • Android --- CameraX讲解
  • ElasticSearch view
  • list的使用,及部分功能的模拟实现(C++)
  • 联想Y7000+RTX4060+i7+Ubuntu22.04运行DeepSeek开源多模态大模型Janus-Pro-1B+本地部署
  • [Spring] Gateway详解
  • 音叉模态分析
  • BW AO/工作簿权限配置
  • C++ 字母大小写转换两种方法统计数字字符的个数
  • 如何使用 ChatBox AI 简化本地模型对话操作
  • 前端面试笔试题目(一)
  • Docker Hello World
  • UE 5.3 C++ 对垃圾回收的初步认识
  • ARM内核:嵌入式时代的核心引擎