zoukankan      html  css  js  c++  java
  • SpringMVC的HttpMessageConverter

    前提:

    从浏览器向服务器发送请求时,发送的数据都是字符串;

    浏览器接收到服务器的响应时,接收的数据也是字符串;

    也就是说:Http请求报文和响应报文其实都是字符串,意味着浏览器和服务器是通过交换原始文本进行通信的。

    现象:

    请求报文到达SpringMVC后 ,转换成了java对象;

    响应在从SpringMVC 出去前也是java对象;

    这就说明:存在一个字符串到java对象的转化问题。

    过程:

    @ResponseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】。 

    在SpringMVC / SpringBoot中,上面描述的转换过程使用的转换器就是HttpMessageConverter;

    还可以通过设置HttpMessageConverter的属性来改变转换过程中的行为;例如:设置编码,设置日期转换格式等;

    转换过程如下图:

    工具:

    常用的HttpMessageConverter的子类如下:

    StringHttpMessageConverter:负责java对象和字符串类型报文之间的转换,可设置编码;

    MappingJackson2HttpMessageConverter:负责java对象和Json类型报文之间的转换,但需要JSON的jar包的配合;

    具体配置:

    <mvc:annotation-driven>
       <mvc:message-converters>
          <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
          <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
       </mvc:message-converters>
     </mvc:annotation-driven>

    或者

    @Configuration
    @EnableWebMvc
    @ComponentScan("com.centfor.www")
    public class ServletConfig  implements WebMvcConfigurer{
    	@Override
    	// 设置MessageConverter
    	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    		converters.add(stringHttpMessageConverter());
    		converters.add(mappingJackson2HttpMessageConverter());
    	}
    }
  • 相关阅读:
    关于脚本编写的注意点
    关于情报收集以及应用
    关于情报收集以及应用
    关于linux服务器的批量维护、批量升级、
    关于文档
    cf卡中,wtmp文件较大,导致磁盘空间满了
    node.js 对接公众平台
    highcharts的.net本地导出环境安装记录
    兼容 IE,firfox 的时间日期出现 NaN
    IE11无法 登陆银行网站
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302439.html
Copyright © 2011-2022 走看看