文章目录

  • 消息转化器的作用
  • 消息转化器的主要方法
  • 默认配置的消息转化器
  • 注意事项

在整个数据流转过程中,前端的请求报文转化为Java对象,Java对象转化为响应报文,这里就用到了HttpMessageConverter(消息转换器)。

消息转化器的作用

  1. 将请求报文转化为Java对象
  2. 将Java对象转化为响应报文

消息转化器的主要方法

  • getSupportedMediaTypes:获取支持的MediaType集合(如:text/html,text/plain,application/json)
  • canRead:判断是否能读(请求)
  • read:将请求数据进行格式转换(canRead方法返回值为true时调用)
  • canWrite:判断是否能写(响应)
  • write:将响应数据进行格式转换(canWrite方法返回值为true时调用)

默认配置的消息转化器

SpringMVC启动时会自动配置一些HttpMessageConverter(WebMvcConfigurationSupport类的addDefaultHttpMessageConverters)方法

源码如下:

 protected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters) {messageConverters.add(new ByteArrayHttpMessageConverter());messageConverters.add(new StringHttpMessageConverter());messageConverters.add(new ResourceHttpMessageConverter());messageConverters.add(new ResourceRegionHttpMessageConverter());try {messageConverters.add(new SourceHttpMessageConverter<>());}catch (Throwable ex) {// Ignore when no TransformerFactory implementation is available...}messageConverters.add(new AllEncompassingFormHttpMessageConverter());if (romePresent) {messageConverters.add(new AtomFeedHttpMessageConverter());messageConverters.add(new RssChannelHttpMessageConverter());}if (jackson2XmlPresent) {Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.xml();if (this.applicationContext != null) {builder.applicationContext(this.applicationContext);}messageConverters.add(new MappingJackson2XmlHttpMessageConverter(builder.build()));}else if (jaxb2Present) {messageConverters.add(new Jaxb2RootElementHttpMessageConverter());}if (jackson2Present) {Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.json();if (this.applicationContext != null) {builder.applicationContext(this.applicationContext);}messageConverters.add(new MappingJackson2HttpMessageConverter(builder.build()));}else if (gsonPresent) {messageConverters.add(new GsonHttpMessageConverter());}else if (jsonbPresent) {messageConverters.add(new JsonbHttpMessageConverter());}if (jackson2SmilePresent) {Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.smile();if (this.applicationContext != null) {builder.applicationContext(this.applicationContext);}messageConverters.add(new MappingJackson2SmileHttpMessageConverter(builder.build()));}if (jackson2CborPresent) {Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.cbor();if (this.applicationContext != null) {builder.applicationContext(this.applicationContext);}messageConverters.add(new MappingJackson2CborHttpMessageConverter(builder.build()));}}

部分消息转换器解析

名称 描述
MappingJackson2HttpMessageConverter 负责读、写JSON格式数据(利用Jackson)
AllEncompassingFormHttpMessageConverter 负责读、写Form表单数据
Jaxb2RootElementHttpMessageConverter 负责读、写XML格式数据(使用JAXB)
ByteArrayHttpMessageConverter 负责读、写二进制格式数据
StringHttpMessageConverter 负责读、写字符串格式数据
ResourceHttpMessageConverter 负责读、写资源文件数据
SourceHttpMessageConverter 负责读、写资源数据

注意事项

  1. 系统有默认配置的消息转换器集合。

  2. 处理过程会按集合顺序匹配合适的消息转换器,如果有合适的,就会使用该消息转换器处理(读、写),后续的消息转换器不再执行。

  3. 自定义的消息转换器要想生效,必须放到集合中相同类型的消息转换器前面,原因参考第二点。

    思考:既然自定义的消息转换器必须放到集合中相同类型的消息转换器前面,那是否能直接改动集合中原有的消息转换器来达到自定义的效果,而不必在加一个(暂未没研究)。

  4. 添加自定义消息转换器时注意默认消息转换器是否生效

    1. WebMvcConfigurer.configureMessageConverters方法会覆盖默认消息转换器集合
    2. WebMvcConfigurer.extendMessageConverters方法不会覆盖默认消息转换器集合

SpringBoot消息转换器:HttpMessageConverter相关推荐

  1. SpringBoot 消息转换器 HttpMessageConverter

    1.简介: Spring在处理请求时,由合适的消息转换器将请求报文绑定为方法中的形参对象,在这里,同一个对象就有可能出现多种不同的消息形式,比如json和xml.同样,当响应请求时,方法的返回值也同样 ...

  2. springMVC消息转换器HttpMessageConverter

    前言 为何需要消息转换器 HttpMessageConverter是用来处理request和response里的数据的. 请求和响应都有对应的body,而这个body就是需要关注的主要数据. 请求体的 ...

  3. 【Spring学习笔记-MVC-1.3】消息转换器HttpMessageConverter

    作者:ssslinppp       参考链接: SpringMVC源码剖析(五)-消息转换器HttpMessageConverter: http://my.oschina.net/lichhao/b ...

  4. springboot自定义消息转换器HttpMessageConverter

    在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制就是利用HttpMessageCo ...

  5. java注解返回不同消息,SpringMVC源码剖析5:消息转换器HttpMessageConverter与@ResponseBody注解...

    转自 [SpringMVC关于json.xml自动转换的原理研究[附带源码分析]](https://www.cnblogs.com/fangj... 部分代码会放在我的的Github:https:// ...

  6. SpringMVC源码剖析(五)-消息转换器HttpMessageConverter

    概述 在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换,底层这种灵活的消息转换机制,就是Spring3.x中新 ...

  7. json txt格式转换器_SpringBoot项目中如何定制HTTP消息转换器

    本文首发于个人网站:Spring Boot项目中如何定制HTTP消息转换器,如需转载,请注明来源 在构建RESTful数据服务过程中,我们定义了controller.repositories,并用一些 ...

  8. SpringMVC自定义配置消息转换器踩坑总结

    问题描述 最近在开发时候碰到一个问题,springmvc页面向后台传数据的时候,通常我是这样处理的,在前台把数据打成一个json,在后台接口中使用@requestbody定义一个对象来接收,但是这次数 ...

  9. 基于Springboot外卖系统08:员工账号状态管理功能+对象转换器+扩展Spring mvc的消息转换器

    1. 员工账号状态管理 1.1 需求分析 在员工管理列表页面,可以对某个员工账号进行启用或者禁用操作.账号禁用的员工不能登录系统,启用后的员工可以正常登录.如果某个员工账号状态为正常,则按钮显示为 & ...

最新文章

  1. OpenCV支持中文字符输出实现
  2. Windows Phone 7 不温不火学习之《项目模板》
  3. 文本编辑器创建状态栏
  4. angular 标准目录结构_Angular-cli新建项目目录结构详解
  5. java环境_配置java环境变量
  6. 计算机相关报道的观后感,《新闻报道》观后感800字
  7. 各厂商服务器ESXI最高版本适配情况
  8. android报错:org.ksoap2.SoapFault cannot be cast to org.ksoap2.serialization.SoapObject
  9. Atitit.uml2 api 的编程代码实现设计uml开发 使用eclipse jar java 版本
  10. LVS 三种工作模式
  11. CCS中CMD文件详解
  12. 《我的博客》之选择公共博客平台还是自建博客站点
  13. 【转】用 Go 构建一个区块链
  14. luogu3933 Chtholly Nota Seniorious
  15. 模仿探探(百合网,珍爱网)卡片左右滑动效果,滑动流畅,卡片view无限重生
  16. Rotten Tomatoes 电影数据分析
  17. JS日期格式转换时间戳,时间戳转换日期,获取当前天23:59:59,时间戳判断是否是今天
  18. HDU-5172-GTY's gay friends-线段树单点更新
  19. wo de wen zhang
  20. 视音频编解码技术及其实现 杭州海康威视数字技术有限公司 胡扬忠

热门文章

  1. 我的世界服务器无限漏斗,我的世界漏斗bug 我的世界怎么刷东西
  2. https 加密、http2.0、keep-alive
  3. 区块链新规,不可忽视的几个细节
  4. Verilog HDL 编程规范
  5. TCP协议(Transmission Control Protocol)
  6. tomcat配置SSI
  7. GE董事长兼首席执行官杰夫.伊梅尔特上任第一年致诸位股东、客户与员工(中英文)
  8. netty-读半包处理--ByteToMessageDecoder
  9. android培训讲师介绍,安卓培训讲师浅析android项目重点知识
  10. 如何在2小时内用1块钱赚到100块钱?