解决LocalDateTime传值JSON格式化问题

2023-10-29

LocalDateTime是JDK8中提供的新功能,极大的优化了原生日期时间类的使用。但是第一次使用该类可能会在传值过程中出现格式化的小问题(如:JSON无法解析前端所传格式,序列化时LocalDateTime成为数组等),以下提供简单的解决方案。

推荐方法:

在WebMvcConfigurer实现类下完成以下两步

1). 注册一个Converter<String, LocalDateTime>实现类,其作用是处理于url所携带的参数上(如:@RequestParam@PathVariable )的LocalDateTime参数;

2). 增加一个序列化、反序列化器,作用为处理实体类的的LocalDateTime属性。

P.S. 经过多轮测试,得出了以上方法,由于该方法需要以上两个步骤,作为完美主义者,我曾尝试用一个步骤解决,但并未如愿以偿,若你有更好的方法,还望不吝赐教,先行谢过。

源码如下:

// import ...

@Configuration
@EnableWebMvc
public class WebMvcConfig implements WebMvcConfigurer {
	
	/**
	 * 自定义String转LocalDateTime方法,此方法将会作用于url所携带的参数上
	 */
    static class StringToLocalDateTimeConverter implements Converter<String, LocalDateTime> {
        @Override
        public LocalDateTime convert(String s) {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            return LocalDateTime.parse(s, formatter);
        }
    }

	/**
	 * 将上述自定义方法进行添加
	 */
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringToLocalDateTimeConverter());
    }
	
	/**
	 * 增加序列化与反序列化器,它们将作用于实体类的LocalDateTime属性。
	 */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        ObjectMapper objectMapper = new ObjectMapper();
        JavaTimeModule module = new JavaTimeModule();
        module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(pattern));
        module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(pattern));
        objectMapper.registerModule(module);
        converters.add(new MappingJackson2HttpMessageConverter(objectMapper));
    }
}

其它方法:

url参数:
给参数加上@DateTimeFormat(此注解来自Spring,无需引入其他包),在pattern中标注约定好的格式即可。

public void Test(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime time) {
	...
}

实体类:
在实体类中的属性上添加@JsonFormat(此注解来自Jackson,该包被Spring所依赖,无需导入),同样在pattern中标注好格式。

@Data
public class Demo {

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime time;
    
}

由于这种方法需要对代码中所有的LocalDateTime都进行标注,相对麻烦,且耦合度高,所以不作推荐。

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

解决LocalDateTime传值JSON格式化问题 的相关文章

随机推荐

  • python多维list去重

    一维的list去重可以用set list 但是二维的list转set就会报错 unhashable type list 原因是set传进来的是不可哈希的变量 Python中那么哪些是可哈希元素 哪些是不可哈希元素 可哈希的元素有 int f
  • 期权策略篇: 实现买方狂欢,让卖方稳赚不赔的策略

    欢迎来到期权策略篇 实现买方狂欢 让卖方稳赚不赔的策略 今天给大家带来的期权策略比较简单 是我们比较常见的四种单腿期权策略 这四种策略分别是买入看涨期权 买入看跌期权 卖出看涨期权 卖出看跌期权策略 本文来自 期权酱 这四种期权策略相对于之
  • 7.27 总结+复盘

    一 初赛错题解析 第一题 题目 解析 像素位 字节位 字节 故选B 第二题 题目 解析 送命题 不会就是不会 做不会只能感叹自己道行甚浅 B选项是代码托管仓库 第三题 题目 解析 选A没啥好说的 记住就好 好奇怎么实现 请自行搜索 拓展一个
  • 2023更新阿里云服务器租用价格表(超详细)

    阿里云服务器分为云服务器ECS和轻量应用服务器 云服务器u1公网带宽可选1M到5M 系统盘为ESSD云盘40GB起 CPU内存配置可选2核2G 2核4G 4核8G 8核16G等配置 云服务器s6公网带宽可选1M到5M 系统盘40G起可选高效
  • 运放单的电源供电和双电源供电

    我们经常看到很多非常经典的运算放大器应用图集 但是他们都建立在双电源的基 础上 很多时候 电路的设计者必须用单电源供电 但是他们不知道该如何将双电源 的电路转换成单电源电路 在设计单电源电路时需要比双电源电路更加小 1 1 电源供电和单电源
  • vue后台管理动态路由-页面刷新之后跳转到默认页面的问题

    路由我们是用公共路由 动态路由 写的过程中发现 在动态路由的页面刷新页面后跳转到了默认页面 也就是我们设置的 path pathMatch redirect dashboard hidden true 本来这行代码我是写到公共路由里面了 就
  • 技术爆炸已至,AIGC(AI-Generated Content)带来内容产业全新格局

    公众号 做棵大树 欢迎关注一起进步 最近 在元宇宙概念大火的同时 人工智能技术也正在迎来新一轮的爆发 Chat GPT AIGC AI Generated Content 人工智能生成内容 正在成为一个新的风口 AIGC 即人工智能生成内容
  • Proteus元件库元件名称及中英对照表

    以下是具体内容 AND 与门 ANTENNA 天线 BATTERY 直流电源 BELL 铃 钟 BVC 同轴电缆接插件 BRIDEG 1 整流桥 二极管 BRIDEG 2 整流桥 集成块 BUFFER 缓冲器 BUZZER 蜂鸣器 CAP
  • 改进YOLO系列:4.添加ACmix注意力机制

    添加ACmix注意力机制 1 ACmix注意力机制论文 ACmix注意力机制原理 ACmix注意力机制的配置 common py配置 yolo py配置 yaml文件配置 1 ACmix注意力机制论文 论文题目 On the Integra
  • 上帝掷骰子吗--量子物理史话

    上帝掷骰子吗 量子物理史话 第一章黄金时代 一 我们的故事要从1887年的德国开始 位于莱茵河边的卡尔斯鲁厄是一座风景秀丽的城市 在它的城中心 矗立着著名的18世纪的宫殿 郁郁葱葱的森林和温暖的气候也使得这座小城成为了欧洲的一个旅游名胜 然
  • C++智能指针简单剖析

    转自 https www cnblogs com lanxuezaipiao p 4132096 html 导读 最近在补看 C Primer Plus 第六版 这的确是本好书 其中关于智能指针的章节解析的非常清晰 一解我以前的多处困惑 C
  • 如何有效地进行代码 Review

    前言 作为公司代码委员会 golang 分会的理事 我 review 了很多代码 看了很多别人的 review 评论 发现不少同学 code review 与写出好代码的水平有待提高 在这里 想分享一下我的一些理念和思路 为什么技术人员包括
  • select下拉框赋值和取值

    jq的select常用的方法 一 下拉框赋值 1 已创建select的下拉框 选中option的value为jquery 例 szfs val jquery 选中option的text为jquery 例 select id option t
  • 五分钟搭建Jetbrains家族IDE授权服务器

    作为Java码农 IntelliJ IDEA可谓是N0 1的开发环境了 对框架的支持 界面 插件都是比较方便的 大大加快了开发的速度以及开发的乐趣 酷炫的界面也能大大的装一个逼 虽然这里教大家搭建授权服务器 但是月入1狗的同志还是支持一下人
  • LVGL学习笔记

    文章目录 前言 一 软件安装 1 VSCode安装 2 MSYS2安装 二 配置环境 1 添加环境变量 2 配置msys2环境 3 配置VSCode 三 运行lvgl示例 前言 最近需要使用LittlevGL 以下简称lvgl 做ARM开发
  • 比较C Sharp和Java

    本文对比C 与Java编程语言 因为这两种语言都具有自动垃圾回收以及运行时编译执行的特点 并且他们的语法都是继承自C语言 C 因此二者有个很多相似之处 但由于C 也被描述为一个C 和Java的混合体 并添加了一些新特性 引入了一些变化 因此
  • 记录el-form+el-dialog表单重置问题

    问题1 使用this refs formName resetFields 方法 表单无法重置 原因 resetField 方法不是将表单重置为空 而是重置为初始值 所以当我们打开新建表单的时候 表单项绑定的属性值为空 在提交表单后 表单项绑
  • 病毒分析教程第三话--静态逆向分析(上)

    静态逆向分析 上 教程参考自 恶意代码分析实战 程序来自 http www nostarch com malware htm 使用上两话静态特征分析和动态行为分析的方法只能从宏观的角度分析样本 但由于无法得到源代码 所以我们无法确凿地判定这
  • marquee 和JS 滚动效果

    一 marquee标签的几个重要属性 1 direction 滚动方向 包括4个值 up down left right 说明 up 从下向上滚动 down 从上向下滚动 left 从右向左滚动 right 从左向右滚动 语法
  • 解决LocalDateTime传值JSON格式化问题

    LocalDateTime是JDK8中提供的新功能 极大的优化了原生日期时间类的使用 但是第一次使用该类可能会在传值过程中出现格式化的小问题 如 JSON无法解析前端所传格式 序列化时LocalDateTime成为数组等 以下提供简单的解决