首页 > 其他分享 >消息转换器

消息转换器

时间:2024-09-18 12:24:43浏览次数:10  
标签:FORMAT DEFAULT TIME 消息 new 转换器 序列化

在日常开发中,经常会遇到一个问题,就是传输对象的时间数据json和对象之间的转换问题。

针对这个问题,之前我知道的方法只有通过注解@JsonFormat(pattern = "yyyy-MM-dd")来指定格式进行转换,但是这种方式有一个麻烦的地方在于,需要在每一个时间属性的上方都加上这个注解。

其实,还有另一个解决方法,就是通过springmvc的消息转换器,可以统一的进行消息对象的转换,包括对日期对象格式的处理。

MessageConverters

  1. 作用:将controller方法的返回值转换为http响应的内容
  2. 原理:当controller返回一个对象时,消息转换器进行转换,将Java对象转换为特定的类型,例如json、xml、html等

使用:

1.在继承自WebMvcConfigurationSupport的配置类中重写方法extendMessageConverters

2.自定义对象转换器类

​ 1.概念:将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象] | 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]

​ 2.实现:

  • 继承ObjectMapper

  • 重写构造方法

    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);
        }
    }
    
    

3.重写方法中创建一个消息转换器对象converter,为消息转换器设置自定义的对象转换器

4.将消息转换器对象扩展加入消息转换器列表converters中

标签:FORMAT,DEFAULT,TIME,消息,new,转换器,序列化
From: https://www.cnblogs.com/yuqiu2004/p/18418230

相关文章

  • 操作系统:进程间通信方式详解(下:消息队列、信号量、共享内存、套接字)
    每日一问:操作系统:进程间通信方式详解(下:消息队列、信号量、共享内存、套接字)进程间通信(Inter-ProcessCommunication,IPC)是操作系统中实现不同进程之间数据交换和协作的关键机制。本文详细介绍了几种常用的IPC方式,包括消息队列、信号量、共享内存和套接字。每种通信方式都......
  • 用户离线消息的Redis和RabbitMQ解决方案
    一、Redis在Redis中实现用户离线期间的消息接收,可以通过组合使用Redis的发布/订阅(Pub/Sub)功能和List数据结构来实现。具体来说,当用户离线时,可以将发送给该用户的消息存储在List中,待用户上线后再从List中读取消息。下面是一个详细的实现方案:1.设计数据结构为了实现......
  • tauri2.x+vue3实践篇|封装多窗口|tauri2.0自定义托盘闪烁消息提示+右键菜单
    最近一直在捣鼓Tauri2.0跨平台框架,之前也有分享几篇tauri1.x实例项目。相较于1.0,tauri2.x框架api有了比较多的变更,而且支持创建android/ios移动端应用。实现类似QQ托盘闪烁消息提醒及右键菜单。框架信息"@tauri-apps/api":">=2.0.0-rc.0","@tauri-apps/cli":">=......
  • 读构建可扩展分布式系统:方法与实践06异步消息传递
    1. 异步消息传递1.1. 通信是分布式系统的基础,也是架构师需要纳入其系统设计的主要问题1.2. 客户端发送请求并等待服务器响应1.2.1. 这就是大多数分布式通信的设计方式,因为客户端需要得到即时响应后才能继续1.2.2. 并非所有系统都有这个要求1.3. 使用异步通信的......
  • 中间件知识点-消息中间件(Kafka)二
    Kafka一、Kafka介绍及基本原理kafka是一个分布式的、支持分区的、多副本、基于zookeeper的分布式消息系统/中间件。kafka一般不会删除消息,不管这些消息有没有被消费。只会根据配置的日志保留时间(log.retention.hours)确认消息多久被删除,默认保留最近一周的日志消息(日志......
  • 观察者模式:如何发送消息变化的通知?
    观察者模式是一种非常流行的设计模式,也常被叫作订阅-发布模式。观察者模式在现代的软件开发中应用非常广泛,比如,商品系统、物流系统、监控系统、运营数据分析系统等。现在我们常说的基于事件驱动的架构,其实也是观察者模式的一种最佳实践。当我们观察某一个对象时,对象传递出的每一个......
  • ActiveMQ 的网络连接及消息回流机制
    1、ActiveMQ的网络连接activeMQ如果要实现扩展性和高可用性的要求的话,就需要用用到网络连接模式。NetworkConnector:主要用来配置broker与broker之间的通信连接如上图所示,MQ服务器1和MQ服务器2通过NewworkConnector相连,则生产者1和生产者2发送消息,消费者3和消费者4都可......
  • 音频转换芯片DP7344兼容CS4344双通道24位DA转换器
    产品简介DP7344是一款完整的2通道输出数模转换芯片,内含插值滤波器、Multi-Bit数模转换器、输出模拟滤波器,并支持大部分的音频数据格式。DP7344基于一个带线性模拟低通滤波器的四阶Multi-BitΔ∑调制器,自动检测信号频率和主时钟频率,在2KHz和200KHz之间自动调节采样率。DP......
  • uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款
    uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝扫码支付/收付款等功能,界面漂亮颜值高,视频商城小工具等,蚂蚁森林种树养鸡农场偷菜样样齐用于视频,商城,直播,聊天等sumer-alipay介绍uniapp精仿支付宝UI界面,首页/理财/消息/生活/口碑/我的,还有模拟支付宝......
  • ros 自定义消息(图像+标志位+位姿)python和c++发布和接受
      编译 脚本 v3_gaosi_img_pose_flag.sh#!/bin/bash#外部给与执行权限#sudochmod+xrun_ros_nodes.sh#定义ROS安装路径#安装时候添加到系统路径了不需要每次都sourceROS_SETUP="/opt/ros/noetic/setup.bash"#定义工作目录路径自己的工程没有加到系......