configureMessageConverters:
覆盖此方法以添加自定义 HttpMessageConverters 以与 RequestMappingHandlerAdapter 和 ExceptionHandlerExceptionResolver 一起使用。将转换器添加到列表会关闭默认情况下会注册的默认转换器。另请参阅 addDefaultHttpMessageConverters 以添加默认消息转换器。

代码:自定义 WebMvcConfigurationSupport:

package com.itheima.pinda.config;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.DateSerializer;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
@Slf4j
@Configuration
@EnableSwagger2
public class ConfigurationSupport extends WebMvcConfigurationSupport {/*** deserializerByType 解决string类型入参转为 LocalDateTime 格式问题** @return*///ackson2ObjectMapperBuilderCustomizer:希望通过保留其默认自动配置的Jackson2ObjectMapperBuilder进一步自定义ObjectMapper的 bean 可以实现回调接口。@Beanpublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return builder -> builder//    .deserializerByType(Enum.class, EnumDeserializer.INSTANCE).deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))).deserializerByType(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))).deserializerByType(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));}/*** 防止@EnableMvc把默认的静态资源路径覆盖了,手动设置的方式** @param registry*/@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {// 解决静态资源无法访问registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");// 解决swagger无法访问registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");// 解决swagger的js文件无法访问registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}/*** 解决序列化*///配置HttpMessageConverters以用于读取或写入请求或响应的主体。如果未添加转换器,则会注册转换器的默认列表。@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("初始化jackson配置( 枚举类型、时间格式 )");//在json转换之前先进行string转换converters.add(new StringHttpMessageConverter());//添加json转换MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();jackson2HttpMessageConverter.setObjectMapper(new JacksonObjectMapper());converters.add(jackson2HttpMessageConverter);//追加默认转换器super.addDefaultHttpMessageConverters(converters);}protected static final String DEFAULT_DATE_TIME_FORMAT = "yyyy/MM/dd HH:mm:ss";protected static final String DEFAULT_DATE_FORMAT= "yyyy/MM/dd";protected static final String DEFAULT_TIME_FORMAT= "HH:mm:ss";class JacksonObjectMapper extends ObjectMapper {//ObjectMapper 提供了读取和写入 JSON 的功能,无论是从基本 POJO(Plain Old Java Objects)// 还是从通用 JSON 树模型 ( JsonNode ) 读取和写入,以及执行转换的相关功能。// 它也是高度可定制的,既可以处理不同风格的 JSON 内容,也可以支持更高级的对象概念,// 例如多态性和对象标识。 ObjectMapper还充当更高级的ObjectReader和ObjectWriter类的工厂public JacksonObjectMapper() {super();//收到未知属性时不报异常 public static final DeserializationFeature FAIL_ON_UNKNOWN_PROPERTIESthis.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);//反序列化时,属性不存在的兼容处理this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
//com.fasterxml.jackson.databind.module public class SimpleModuleSimpleModule simpleModule = new SimpleModule()//addSerializer添加序列化程序以处理特定类型值的方法。.addSerializer(BigInteger.class, ToStringSerializer.instance).addSerializer(BigDecimal.class, new BigDecimalSerializer()).addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))).addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))).addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))).addSerializer(Date.class, new DateSerializer(false, new SimpleDateFormat(DEFAULT_DATE_TIME_FORMAT)));this.registerModule(simpleModule);}}
}

自定义configureMessageConverters和ObjectMapper解决json序列化问题实例相关推荐

  1. JSON序列化以及JSON反序列

    JSON序列化数组或对象以及JSON反序列 简单说明 补充 工具 FastJson 对象与Json的String类型的转换 List<>数组与Json的String类型的转换 hutool ...

  2. Spring Session Redis——自定义JSON序列化解决方案

    问题描述 Spring Session + Redis--自定义JSON序列化解决方案 问题分析 RedisHttpSessionConfiguration中,Bean名称必须是springSessi ...

  3. .NET 自定义Json序列化时间格式

    .NET 自定义Json序列化时间格式 Intro 和 JAVA 项目组对接,他们的接口返回的数据是一个json字符串,里面的时间有的是Unix时间戳,有的是string类型,有的还是空,默认序列化规 ...

  4. 解决MVC Json序列化的循环引用问题/EF Json序列化循引用问题---Newtonsoft.Json

    1..Net开源Json序列化工具Newtonsoft.Json中提供了解决序列化的循环引用问题: 方式1:指定Json序列化配置为 ReferenceLoopHandling.Ignore 方式2: ...

  5. 解决Python自带的json序列化工具不能序列化datetime类型数据问题

    解决Python自带的json序列化工具不能序列化datetime类型数据问题 参考文章: (1)解决Python自带的json序列化工具不能序列化datetime类型数据问题 (2)https:// ...

  6. SpringBoot之解决一对一、多对一、多对多等关联实体在JSON序列化/输出时产生的无限递归死循环问题(infinite recursion)

    SpringBoot之解决一对一.多对一.多对多等关联实体在JSON序列化/输出时产生的无限递归死循环问题(infinite recursion) 参考文章: (1)SpringBoot之解决一对一. ...

  7. SpringBoot自定义JSON序列化规则

    自定义类继承JsonSerializer import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ReflectUtil; ...

  8. 【Go】自定义json序列化

    一.忽略字段 我们知道,通过tag,可以有条件地实现定制Go JSON序列化的方式,比如json:"abc,omitempty", 当字段的值为空的时候,我们可以在序列化后的数据中 ...

  9. SpringBoot配置跨域 修改默认json序列化

    SpringBoot配置跨域 修改默认json序列化 修改跨域 addCorsMappings(CorsRegistry registry)方法添加跨域设置的,无法生效,原因是请求经过的先后顺序问题, ...

最新文章

  1. SQL2K数据库开发八之表操作创建主键
  2. nebula如何实现用in实现any(x,y,z)的效果
  3. 多个客户端抢夺命名管道_使用Kafka构建数据管道
  4. sklearn PCA特征降维
  5. iOS谁说我不能执行你
  6. 老人为什么要去依靠曾经不喜欢的子女去为她养老?
  7. 基于django的视频点播网站开发-step10-后台评论管理功能...
  8. python接口自动化发送get请求 详解(一)
  9. PHP-redis中文文档 1
  10. 我的github教程
  11. 微信小程序--基于colorui构建皮皮虾短视频去水印组件(仅供学习使用)
  12. 【FXCG】多头陷阱知多少
  13. wpf界面菜单栏设计
  14. 正确方法将电子书放到Kindle的documents文件夹,还是看不了书?
  15. 基于FPGA的PWM加减速控制实现
  16. Iphone被刷机后用电信卡提示未激活,移动联通卡可以正常使用
  17. windows xp下载python3.5.8_Python3.5中文版下载
  18. 10分钟上手pythonpandas_10分钟pandas教程
  19. springboot毕业设计 基于springboot在线视频点播系统毕业设计设计与实现参考
  20. 中断API之irq_set_chained_handler

热门文章

  1. linux 搭建.net运行环境,.net core运行环境搭建 linux + windows
  2. win7降低屏幕亮度_深度解析:Redmi K20 Pro 第七代屏幕指纹技术
  3. python 数组在最前面插入数据_Python 按照现有规则将数值插入到数组中
  4. Java web应用引用外部jar包 运行时报ClassNotFoundException 解决方法
  5. 诸葛io的技术架构图_【总结】MySQL技术内幕二:InnoDB存储引擎技术特性
  6. linux用avk怎么提取字符,在Linux下进行视频音频格式转换提取等
  7. 阿里云mysql5.7 窗口函数_关于阿里云centos版本,mysql5.7的一些注意事项
  8. 浙江万里学院计算机专业宿舍,浙江万里学院宿舍条件,宿舍几人间环境好不好(图片)...
  9. 三、HDFS中的Java和Python API接口连接
  10. 三、深入elasticsearch基本语法