REST (Representational State Transfer),以数据交互为主要内容所设计的系统服务。通过URL来作为资源识别的依据。
Spring MVC充分支持了REST,有两种实现方式:
- 协商资源表述,通过ContentNegotiatingViewResolver来向请求方传递合适资源表述形式
- 使用HTTP信息转换器,即Message Converter来将资源(即控制器产生的数据)转换为服务与客户端的表述形式,并传递给请求方
第一种模式比较复杂,一般实现REST系统通过第二种方式,更直接更易配置。
使用HTTP信息转换器
在使用HTTP信息转换器的过程中,最重要的两个元素为:
- 数据(控制器所产生的结果)
- 消息转换器(message converter)
Spring MVC在配置的时候会默认注册一系列消息转换器,其中最主要的有:
- MappingJackson2HttpMessageConverter:
用来转化JSON和类型化的对象或非类型化的HashMap,需要Jackson 2 JSON包 - Jaxb2RootElementHttpMessageConverter
用来在XML(text/xml或application/xml)和使用JAXB2注解的对象间互相读取和写入,需要JAXB v2包
只要message converter所依赖的jar包存在于类路径下,这些message converter就会被注册如Spring MVC的上下文中。
Controller产生的数据具体将调用哪一张message converter是由客户请求中的Accept头信息来决定的。
@ResponseBody和@RequestBody
- @ResponseBody
使用@ResponseBody标注Controller一个具体方法时,程序会告诉Spring MVC跳过视图解析过程,并且去根据请求头中的Accept信息来调用对应的message converter将数据转化客户用需要的资源表达形式。
另外我们可以@RequestMapping注解的produce声明属性里来明确表示一个方法只处理符合某个特定Accept的请求。
- @RequestBody
与@ResponseBody相对应的是@RequestBody,该注解用来标注Controller中某个方法的一个参数。Spring MVC会根据客户请求头中的Cont