• 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());
    	}
    }
  • 相关阅读:
    flutter 和 NTFS
    APIO2020 游记
    CF1336F Journey
    ZJOI2020 游记
    CF568E Longest Increasing Subsequence
    CSP2020 游记
    洛谷 P6217 简单数论题
    CF587F Duff is Mad
    CF526G Spiders Evil Plan
    WC2021 游记
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302439.html
Copyright © 2020-2023  润新知