<b style=""><font color="#0076b3">使用HttpMessageConverter<</font><font color="#c41230">T</font><font color="#0076b3">></font></b>
<b><font color="#0076b3">负责将请求信息转换成一个对象(类型为T),将对象(类型为T)输出为响应信息</font></b>
DispatcherServlet默认已经安装了RequestMappingHandlerAdapter去处理HttpMessageConverter
默认实现类
<b><font color="#0076b3">StringHttpMessageConverter</font></b>
T为String,可读取所有媒体类型(*/*),可通过supportedMediaTypes属性指定媒体类型,响应信息的媒体类型为text/plain(即Content-Type的值)<br>
<b><font color="#0076b3">ByteArrayHttpMessageConverter</font></b>
T为byte[]类型,可读取*/*,可通过supportedMediaTypes属性指定媒体类型,响应信息媒体类型为application/octer-stream<br>
MarshallingHttpMessageConverter:T为Object,可读取text/xml和application/xml媒体类型请求,响应信息的媒体类型为text/xml或application/xml<br>
Jaxb2RootElementHttpMessageConverter
<b><font color="#0076b3">MappingJacksonHttpMessageConverter</font></b>
利用jackson的ObjectMapper读写Json数据,T为Object,可读取application/json,响应媒体类型为application/json<br>
FormHttpMessageConverter<br>
AllEncompassingFormHttpMesssageConverter
扩展于FormHttpMessageConverter。如果表单部份属性是XML数据,则可以使用该转换器进行读取
XmlAwareFormHttpMessageConverter
ResourceHttpConverterMessage
BufferedImageHttpMessageConverter
SourceHttpMessageConverter
RssChannelHttpMessageConverter
AtomFeedHttpMessageConverter
装配其它类型的HttpMessageConverter
在web容器上下文中定义一个RequestMappingHandlerAdapter
<!-- 自定义装配HttpMessageConverter 开始 --><br> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"<br> p:messageConverters-ref="myConverters"/><br> <util:list id="myConverters"><br> <bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/><br> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/><br> <bean class="org.springframework.http.converter.StringHttpMessageConverter"/><br> <bean class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"/><br> </util:list><br> <!-- 自定义装配HttpMessageConverter 结束 -->
自定义的RequestMappingHandlerAdapter配置,将覆盖默认配置
使用HttpMessageConverter<T>
使用<b><font color="#0076b3">@RequestBody/@ResponseBody</font></b>对处理方法进行标注
不需要成对出现
使用<b><font color="#0076b3">HttpEntity<T>/ResponseEntity<T></font></b>作为处理方法的入参或返回值
不但可以访问请求和响应报文体的内容,还可以访问报文头的内容也不需要成对出现。
只有当控制器处理方法使用了上面两种方式时,Spring MVC才会使用注册的HttpMessageConverter对请求/响应消息进行处理
使用RequestTemplat
调用web服务端的服务,支持REST风格的URL,且内部维护了HttpMessageConverter组件
使用@RestController
为了方便Rest开发引入了@RestController注解,相当于@Controller+@ResponseBody
(<b><font color="#c41230">使用REST风格开发</font></b>)当我们使用Rest风格开发程序时,只需要配置
<mvc:annotation-driven/><br> <!--扫描通过注解配置的类--><br> <context:component-scan base-package="top.richpeople"><br> <!--如果使用了spring,可以用context:include-filter设置只扫描@Controller别的交给Spring容器去管理--><br> <!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>--><br> </context:component-scan>