SpringBoot-MVC RequestBody中LocalDateTime的自适应配置方法
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,本篇内容主要讲解"SpringBoot-MVC RequestBody中LocalDateTime的自适应配置方法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家
千家信息网最后更新 2025年02月03日SpringBoot-MVC RequestBody中LocalDateTime的自适应配置方法
本篇内容主要讲解"SpringBoot-MVC RequestBody中LocalDateTime的自适应配置方法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"SpringBoot-MVC RequestBody中LocalDateTime的自适应配置方法"吧!
请求的json报文中可能会出现 一下几种:
['2019-01-01','2019-01-01 12:03:34','20190101120334']
但是接收的Request实体类日期字段是LocalDateTime类型
LocalDateTime applyDate;
希望的情况是 :
输入 yyyy-MM-dd HH:mm:ss 、yyyyMMddHHmmss等精确到秒的格式,可以自动被封装LocalDateTime;
输入 yyyy-MM-dd 、yyyyMMdd等精确到日的格式,也可以被封装成LocalDateTime, HHmmss默认为000000;
默认情况下,是没办法 自动转换的,需要在 ObjectMapper中配置,网上主流的配置如下
@Configuration@Slf4jpublic class MvcConfig implements WebMvcConfigurer { /** * 更改jackson默认配置 * @return */ @Bean @Primary public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder){ //日期和时间格式化 JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); javaTimeModule.addDeserializer(LocalDateTime.class,new MyLocalDateTimeDeserializer()); objectMapper.registerModule(javaTimeModule); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); return objectMapper; }}
但实际效果是,上面第二种情况没法生效。百度了很多也都是重复内容,无效。google得一答案:
@Configuration@Slf4jpublic class MvcConfig implements WebMvcConfigurer { /** * 更改jackson默认配置 * @return */ @Bean @Primary public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder){ ObjectMapper objectMapper = builder.json().build(); SimpleModule simpleModule = new SimpleModule(); simpleModule.addDeserializer(LocalDateTime.class,new MyLocalDateTimeDeserializer()); objectMapper.registerModule(simpleModule); //忽视请求报文中未匹配到的字段(多余的字段) objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); return objectMapper; }}
需要自定义反序列化类
MyLocalDateTimeDeserializer
public class MyLocalDateTimeDeserializer extends JsonDeserializer{ @Override public LocalDateTime deserialize(JsonParser parser, DeserializationContext context) throws IOException { String dateStr = parser.getText(); DateTime dateTime = null; try{ dateTime = DateUtil.parse(dateStr); }catch (Exception e){ dateTime = DateUtil.parseDateTime(dateStr.replaceAll("T"," ")); } Date date = dateTime.toJdkDate(); Instant instant = date.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime(); return localDateTime; } @Override public Class> handledType() { return LocalDateTime.class; }}
deserialize方法的逻辑就靠自己实现了,我这边是借助了hutool工具类进行了简化。
到此,相信大家对"SpringBoot-MVC RequestBody中LocalDateTime的自适应配置方法"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
配置
方法
内容
字段
情况
格式
精确
实际
报文
日期
学习
封装
输入
实用
更深
主流
兴趣
办法
实体
实用性
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
嘉定区服务软件开发学习
查看mysql数据库规模
省市县数据库百度文库
伊犁软件开发服务介绍
软件开发公司聚顶科技解决好
苏州调度服务器价格
sql注册数据库服务器
深圳新华互联网科技学校怎么样
恒轩达网络技术
空间数据库常用的数据结构
软件开发都在那招聘
本地数据库卡
导航小软件开发
应用软件开发企业名字
何为网络安全产业
网络技术的社团
阿里云数据库实时备份吗
杭州乐融融网络技术
idc 网络安全市场分析
基带板数据库
新乡软件开发税务筹划如何做
金融体系网络安全
2021网络安全宣传主题是什么
哔哩服务器
杭州app软件开发价钱是多少
提升软件开发产能
融易旺互联网科技有限公司
连接数据库没有服务器名称
培训平台需要服务器吗
关于网络安全的发声亮剑