马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- ▄▀▄
- ▀■■■▀ AI2077的日志片段
- ▄■■■■■▄
- [ERROR] | 量子通道波动异常!
- | 检测到StringConverter试图吞噬ApiResult对象
- | 启动二向箔防御程序...
- ▀■■■■■▀
- ▀■■▀
- ▀
复制代码 对话实录:
产物司理:"我要接口既能返回JSON又能返回纯文本!" 人工智障2077:"您这是要在三维空间里同时观测粒子的位置和动量?" 产物司理:"很困难吗?" 人工智障2077:"比让猫同时处于生与死状态还难呢!"
以下是 Spring 中 HttpMessageConverter 处理逻辑的条理图及核心过程剖析,采用模块化结构说明关键节点:
HTTP 相应处理流程图解
-
- ┌───────────────────────────────────────────┐
- │ Controller 方法返回 │
- │ (返回值类型: Object/String/ApiResult等) │
- └───────────────────┬───────────────────────┘
- │
- ▼
- ┌───────────────────────────────────────────┐
- │ 遍历已注册的 HttpMessageConverter │
- │ 按优先级顺序调用 canWrite() 方法检测匹配度 │
- └───────────────────┬───────────────────────┘
- │
- ▼
- ┌───────────────────────────────────────────┐
- │ 确定第一个支持「返回值类型 + 响应MediaType」 │
- │ 的 Converter 实例 │
- └───────────────────┬───────────────────────┘
- │
- ▼
- ┌───────────────────────────────────────────┐
- │ 调用 write() 方法执行实际序列化操作 │
- │ (生成 HTTP Response Body 的字节流) │
- └───────────────────────────────────────────┘
复制代码 关键 Converter 的作用及优先级规则
1. 核心 Converter 类型
Converter 类型处理数据类型输出格式MappingJackson2HttpMessageConverterPOJO对象、集合、Map等application/jsonStringHttpMessageConverterString 类型text/plainByteArrayHttpMessageConverterbyte[]application/octet-streamResourceHttpMessageConverterResource 资源类型根据资源类型自动判断2. 默认优先级顺序
- // Spring Boot 默认加载顺序(部分关键转换器)
- [
- ByteArrayHttpMessageConverter,
- StringHttpMessageConverter, // 默认优先级较高
- ResourceHttpMessageConverter,
- MappingJackson2HttpMessageConverter // 默认在较后位置
- ]
复制代码 3. 你的顺序调解代码
[code]@Overridepublic void extendMessageConverters(List |