@RequestBody(把接收的数据转换为java对象)
作用: 用于读取Request请求的body部分数据,是放在方法中参数类型之前,@RequestBody需要接的参数是一个string化的json,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象(javaBean)上。再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。
其实要使用@RequestBody这个注解还需要额外配置一个Bean,也就是自动帮我们接收json并转成对象的消息转换器messageConverter,Spring3.1之后的版本,那么配置在RequestMappingHandlerAdapter下:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> </bean> </list> </property> </bean>
如不要求复杂的转化也可以通过<mvc:annotation-driven />来代替省略上面配置
一般此注解用在ajax获取数据时,因此请求时注意的是Content-Type的值是application/json, application/xml这种
@ResponseBody(把java对象转换为指定格式的数据并return)
作用:
该注解用于将Controller的方法返回的对象,注解可以放在方法前也可以放在返回值类型前,通过适当的HttpMessageConverter转换为指定格式(JSON)后,写入到Response对象的body数据区。要注意的是
返回的不是html标签的页面,而是其他某种格式的数据时(如json、xml等);因此大多是应用于ajax加载内容的情况下。
在使用 <mvc:annotation-driven />标签配置时,默认配置了RequestMappingHandlerAdapter(注意是RequestMappingHandlerAdapter不是AnnotationMethodHandlerAdapter,,并为他配置了一下默认的HttpMessageConverter。
最后说@restcontroller
@restcontroller其实是@controller和@responsebody的结合 ,实际开发中可以用@restcontroller代替@cotroller使用,而且直接省略@responsebody注解也可以实现方法返回数据对象。