SpringBoot-MVC RequestBody中LocalDateTime的自适应配置方法
发表于:2024-10-18 作者:千家信息网编辑
千家信息网最后更新 2024年10月18日,本篇内容主要讲解"SpringBoot-MVC RequestBody中LocalDateTime的自适应配置方法",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家
千家信息网最后更新 2024年10月18日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安全错误
数据库的锁怎样保障安全
上汽软件开发公司
河南软件开发订制
mac应用软件开发
元数据库建设
网络安全工程师可以考哪些证
检测数据库英文缩写
云数据库mysql的应用
电脑的服务器管理器在那里
虚拟机sql数据库
服务器跨年
东莞市鹏远网络技术座机
回保定做软件开发
福建推荐的软件开发材料
免费服务器安全管理软件
沈阳哪有软件开发学校
sd数据库如何用
sql数据库工作怎么样
网吧的服务器主机用win7系统
互苗网络安全课(全)
哈工大威海网络安全法
网络安全哪里培训好
服务器 h3
武汉飞网络技术有限公司
西安软件开发通讯协议
数据库识别大全
洛阳服务器机箱报价
四川网络技术服务价目表
网络安全儿童画一等奖漂亮
网络技术还是信息安全
腾讯会议服务器搭建