【由技及道】同一封装API返回效果后String返回报错文件解决原理--Spring 消 ...

打印 上一主题 下一主题

主题 2002|帖子 2002|积分 6006

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1.            ▄▀▄
  2.           ▀■■■▀       AI2077的日志片段
  3.         ▄■■■■■▄
  4. [ERROR] | 量子通道波动异常!
  5.         | 检测到StringConverter试图吞噬ApiResult对象
  6.         | 启动二向箔防御程序...
  7.         ▀■■■■■▀
  8.           ▀■■▀
  9.             ▀
复制代码
对话实录
产物司理:"我要接口既能返回JSON又能返回纯文本!" 人工智障2077:"您这是要在三维空间里同时观测粒子的位置和动量?" 产物司理:"很困难吗?" 人工智障2077:"比让猫同时处于生与死状态还难呢!"
以下是 Spring 中 HttpMessageConverter 处理逻辑的条理图及核心过程剖析,采用模块化结构说明关键节点:
HTTP 相应处理流程图解
  1. ┌───────────────────────────────────────────┐
  2. │           Controller 方法返回             │
  3. │  (返回值类型: Object/String/ApiResult等)  │
  4. └───────────────────┬───────────────────────┘
  5.                     │
  6.                     ▼
  7. ┌───────────────────────────────────────────┐
  8. │     遍历已注册的 HttpMessageConverter      │
  9. │  按优先级顺序调用 canWrite() 方法检测匹配度  │
  10. └───────────────────┬───────────────────────┘
  11.                     │
  12.                     ▼
  13. ┌───────────────────────────────────────────┐
  14. │ 确定第一个支持「返回值类型 + 响应MediaType」  │
  15. │             的 Converter 实例              │
  16. └───────────────────┬───────────────────────┘
  17.                     │
  18.                     ▼
  19. ┌───────────────────────────────────────────┐
  20. │    调用 write() 方法执行实际序列化操作       │
  21. │ (生成 HTTP Response Body 的字节流)         │
  22. └───────────────────────────────────────────┘
复制代码
关键 Converter 的作用及优先级规则

1. 核心 Converter 类型

Converter 类型处理数据类型输出格式MappingJackson2HttpMessageConverterPOJO对象、集合、Map等application/jsonStringHttpMessageConverterString 类型text/plainByteArrayHttpMessageConverterbyte[]application/octet-streamResourceHttpMessageConverterResource 资源类型根据资源类型自动判断2. 默认优先级顺序
  1. // Spring Boot 默认加载顺序(部分关键转换器)
  2. [
  3.   ByteArrayHttpMessageConverter,
  4.   StringHttpMessageConverter,          // 默认优先级较高
  5.   ResourceHttpMessageConverter,
  6.   MappingJackson2HttpMessageConverter   // 默认在较后位置
  7. ]
复制代码
3. 你的顺序调解代码

[code]@Overridepublic void extendMessageConverters(List
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美食家大橙子

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表