springmvc中@requestBody,@restcontroller和@responseBody注解

@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注解也可以实现方法返回数据对象。




猜你喜欢

转载自blog.csdn.net/qq_29569183/article/details/80540618