No163:AI中国故事-对话祖珽——多面奇才与AI悖论:天才与狂徒的一体两面
SpringMVC的消息转换器参考视频或文章https://blog.csdn.net/m0_50742275/article/details/144899648?fromshareblogdetailsharetypeblogdetailsharerId144899648sharereferPCsharesource2401_83600210sharefromfrom_link
技术介绍
概述SpringMVC的消息转换器(Message Converter)是Spring框架中用于处理HTTP请求体或响应体与Java对象之间转换的组件。
让开发人员可以轻松地将HTTP请求的数据映射到方法参数并将返回的对象转换为HTTP响应。
工作原理当一个HTTP请求到达SpringMVC应用程序时Spring框架会根据该请求的Content-Type内容类型和Accept接受类型来选择合适的消息转换器。
例如客户端发送了一个JSON格式的POST请求那么SpringMVC会选择MappingJackson2HttpMessageConverter这一消息转换器来将请求体反序列化为Java对象当方法返回一个Java对象并需要将其发送给客户端时SpringMVC仍会使用这一消息转换器来将这个Java对象序列化为JSON格式的响应体。
常见的内置消息转换器消息转换器功能依赖/适用场景MappingJackson2HttpMessageConverter支持JSON格式的HTTP消息序列化与反序列化依赖Jackson库MappingJackson2XmlHttpMessageConverter支持XML格式的HTTP消息序列化与反序列化依赖Jackson库StringHttpMessageConverter处理纯文本字符串类型的HTTP消息无特殊依赖适用于文本传输场景FormHttpMessageConverter处理表单数据格式的HTTP消息支持application/x-www-form-urlencoded和multipart/form-data类型可用于标准表单提交和文件上传ByteArrayHttpMessageConverter处理二进制数据格式的HTTP消息适用于图片传输、文件下载等二进制数据场景Jaxb2RootElementHttpMessageConverter实现XML数据的序列化与反序列化基于JAXB APISourceHttpMessageConverter处理基于javax.xml.transform.Source的XML消息适用于XML源数据的传输场景ResourceHttpMessageConverter处理资源文件类型的HTTP消息适用于文件下载等资源访问场景
项目应用
项目需求初步开发完员工管理模块的员工分页查询功能后测试发现如下问题可以看到最后操作时间的格式并不符合预期这是因为后端响应给前端的日期时间数据没有进行格式化处理。
解决方法有以下2种单个处理在相关属性上加上JsonFormat(pattern)注解对日期时间进行格式化处理统一处理在WebMvcConfig中扩展SpringMVC的消息转换器统一对日期时间类型的数据进行格式化处理。
扩展SpringMVC的消息转换器涉及到的文件如下sky-common:json:JacksonObjectMappersky-server:config:WebMvcConfig
1 创建对象转换器JacksonObjectMapper/** * 对象转换器基于jackson将Java对象转为json或者将json转为Java对象 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象] * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON] */publicclassJacksonObjectMapperextendsObjectMapper{publicstaticfinalDateTimeFormatterDEFAULT_DATE_TIME_FORMATTERDateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss);publicstaticfinalDateTimeFormatterDEFAULT_DATE_FORMATTERDateTimeFormatter.ofPattern(yyyy-MM-dd);publicstaticfinalDateTimeFormatterDEFAULT_TIME_FORMATTERDateTimeFormatter.ofPattern(HH:mm:ss);publicJacksonObjectMapper(){super();// 收到未知属性时不报异常this.configure(FAIL_ON_UNKNOWN_PROPERTIES,false);// 反序列化时属性不存在的兼容处理this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);SimpleModulesimpleModulenewSimpleModule().addDeserializer(LocalDateTime.class,newLocalDateTimeDeserializer(DEFAULT_DATE_TIME_FORMATTER)).addDeserializer(LocalDate.class,newLocalDateDeserializer(DEFAULT_DATE_FORMATTER)).addDeserializer(LocalTime.class,newLocalTimeDeserializer(DEFAULT_TIME_FORMATTER)).addSerializer(LocalDateTime.class,newLocalDateTimeSerializer(DEFAULT_DATE_TIME_FORMATTER)).addSerializer(LocalDate.class,newLocalDateSerializer(DEFAULT_DATE_FORMATTER)).addSerializer(LocalTime.class,newLocalTimeSerializer(DEFAULT_TIME_FORMATTER));// 注册功能模块例如可以添加自定义序列化器和反序列化器this.registerModule(simpleModule);}}
2 在WebMvcConfig中扩展SpringMVC的消息转换器/** * 配置类注册web层相关组件 */ConfigurationpublicclassWebMvcConfigextendsWebMvcConfigurationSupport{// 设置静态资源映射OverrideprotectedvoidaddResourceHandlers(ResourceHandlerRegistryregistry){registry.addResourceHandler(/doc.html).addResourceLocations(classpath:/META-INF/resources/);registry.addResourceHandler(/webjars/**).addResourceLocations(classpath:/META-INF/resources/webjars/);}// 扩展SpringMVC消息转换器统一对日期时间类型进行格式化处理OverrideprotectedvoidextendMessageConverters(ListHttpMessageConverter?converters){// 创建一个消息转换器对象MappingJackson2HttpMessageConverterconverternewMappingJackson2HttpMessageConverter();// 设置对象转换器可以将Java对象序列化为json字符串converter.setObjectMapper(newJacksonObjectMapper());// 将我们设置的对象转换器放入SpringMVC的消息转换器中的第一位置最优先使用converters.add(0,converter);}}
9·1手抓大雷短视频官方版-9·1手抓大雷短视频官方版应用