统一对日期类型进行格式处理【SpringMVC】
在 server 模块中使用
在 WebMvcConfig 类中扩展 SpringMVC 的消息转换器
代码:
1 /** 2 * 扩展Spring MVC框架的消息转化器 3 * @param converters 4 */ 5 @Override 6 public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { 7 //创建一个消息转换器对象 8 MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); 9 //需要为消息转换器设置一个对象转换器,对象转换器可以将Java对象序列化为json数据 10 converter.setObjectMapper(new JacksonObjectMapper()); 11 //将自己的消息转化器加入容器中 12 converters.add(0,converter); 13 }
备注:JacksonObjectMapper 在 common 模块已经提供
1 package com.sky.json; 2 3 import com.fasterxml.jackson.databind.DeserializationFeature; 4 import com.fasterxml.jackson.databind.ObjectMapper; 5 import com.fasterxml.jackson.databind.module.SimpleModule; 6 import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; 7 import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; 8 import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; 9 import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; 10 import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; 11 import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; 12 13 import java.time.LocalDate; 14 import java.time.LocalDateTime; 15 import java.time.LocalTime; 16 import java.time.format.DateTimeFormatter; 17 18 import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES; 19 20 /** 21 * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象 22 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象] 23 * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON] 24 */ 25 public class JacksonObjectMapper extends ObjectMapper { 26 27 public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; 28 public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss"; 29 public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; 30 31 public JacksonObjectMapper() { 32 super(); 33 //收到未知属性时不报异常 34 this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false); 35 36 //反序列化时,属性不存在的兼容处理 37 this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); 38 39 SimpleModule simpleModule = new SimpleModule() 40 .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) 41 .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) 42 .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))) 43 .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) 44 .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) 45 .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))); 46 47 //注册功能模块 例如,可以添加自定义序列化器和反序列化器 48 this.registerModule(simpleModule); 49 } 50 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通