推荐通过webmvcconfigurer的extendmessageconverters方法添加自定义httpmessageconverter,保留默认转换器;避免使用configuremessageconverters以免清空默认配置;fastjson2需手动注册并置前以支持application/json及特殊场景如text/html。

Spring Boot 配置自定义 HttpMessageConverter,核心是通过 WebMvcConfigurer 扩展默认转换器链,而不是覆盖它。关键在于用对方法、选对时机、注意顺序。
推荐方式:用 extendMessageConverters 添加新转换器
这是最安全、最常用的做法,保留 Spring Boot 自动配置的所有默认转换器(如 Jackson、String、byte[] 等),只在末尾或指定位置插入你自己的转换器。
- 创建一个
@Configuration类,实现WebMvcConfigurer - 重写
extendMessageConverters(List<httpmessageconverter>> converters)</httpmessageconverter>方法 - 构造你的转换器(比如
FastJsonHttpMessageConverter或自定义类),设置好配置(如序列化特性、支持的 MediaType) - 调用
converters.add(…)或converters.add(0, …)控制优先级(越靠前越先尝试匹配)
不建议直接用 configureMessageConverters
这个方法会清空所有默认转换器,必须手动把 Jackson、String、Resource 等全部重新注册一遍,极易遗漏,导致 @ResponseBody 返回字符串失败、静态资源 404、文件下载异常等问题。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 除非你有极强的定制需求(比如完全弃用 Jackson、统一替换为 FastJSON2 并禁用所有其他 JSON 处理逻辑)
- 即使如此,也建议先复制 Spring Boot 自动配置的默认列表,再做替换,而非从零手写
常见场景示例:支持 text/html 响应体解析为对象
对接老系统时,接口返回的是 JSON 内容但 Content-Type: text/html,默认的 MappingJackson2HttpMessageConverter 不认这个类型,就会报错。
- 写一个继承
MappingJackson2HttpMessageConverter的子类,重写canRead方法,加入对text/html的支持 - 在
extendMessageConverters中把它加到列表最前面(converters.add(0, yourConverter)),确保优先匹配 - 这样当响应头是
text/html但内容是合法 JSON 时,也能被正常反序列化
FastJSON2 在 Spring Boot 3 中的配置要点
Spring Boot 3 默认只识别 Jackson,FastJSON2 不会自动注册,必须手动注入转换器。
- 引入依赖:
com.alibaba.fastjson2:fastjson2 - 创建
FastJsonHttpMessageConverter实例,搭配FastJsonConfig设置格式化选项(如日期格式、null 处理) - 显式设置支持的 MediaType:
converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON)) - 添加到 converters 列表,并建议放在 Jackson 转换器之前(
add(0, …)),避免被后者抢先处理










