Springmvc 只需要在Controller中的方法中加上@Responsebody注解就可以,使该方法返回的对象为,json对象于是很好奇为什么加上这个注解返回的就是json,不加返回的就是字符串对象
众所周知,我们在springmvc的配置文件中都会有mvc:annotation-driven //启动springmvc的注解驱动就是注解驱动启动的时候,springmvc会自动的初始化7个数据转换器,spring3.0之前需要自己手动注入转换器
- ByteArrayHttpMessageConverter //二级制数据转换器(写入/写出)
-StringHttpMessageConverter //字符串数据转换器(写入/写出)
-ResourceHttpMessageConverter //资源文件数据转换器(写入/写出)
-FormHttpMessageConverter //表单数据转换器(能读取的数据格式为 application/x-www-form-urlencoded,不能读取多媒体表单数据(multipart/form-data),负责写入application/x-www-form-urlencoded和multipart/form-data格式的数据)
-MappingJacksonHttpMessageConverter // json数据转换器 负责读取和写入json格式的数据
-SourceHttpMessageConverter //xml数据转换器
负责读取和写入 xml 中javax.xml.transform.Source定义的数据;
Jaxb2RootElementHttpMessageConverter: //xml数据转换器 负责读取和写入xml 标签格式的数据;
例如:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
<property name="messageConverters" >
<list>
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
<!--定义为json格式-->
<property name="supportedMediaTypes" >
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
这些转换器都实现了HttpMessageConverter<T>这个接口,此接口中有两个方法canRead和canWrite分别对应着Controller层的@ResquestBody和@ResponseBody这两个注解。
读取到@ResquestBody 时canRead返回的true,会按照相应类型,去转换前端传过来的参数
读取到@ResponseBody时canWrite返回的true,会按照相应类型,去转换后台传给前台的数据格式。
Springmvc默认返回的就是json格式的数据。
一般项目中,MappingJacksonHttpMessageConverter转换器,设计人员都会采用将消息转换器中的objectMapper换成自定义的,用于对数据展示的控制和对所传数据中某些类型数据的加工处理,例如将时间格式化。