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());
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值