@ResponseBody & @RequestBody
作用?
@RequestBody 将 HTTP 请求正文插入方法中,使用适合的HttpMessageConverter将请求体写入某个对象。
@ResponseBody 将内容或对象作为 HTTP 响应正文返回,使用@ResponseBody将会跳过视图处理部分,而是调用适合HttpMessageConverter,将返回值写入输出流。
HttpMessageConverter接口
<mvc:annotation-driven
/>开启了之后它给AnnotationMethodHandlerAdapter初始化7个转换器,可以通过调用
AnnotationMethodHandlerAdapter类的getMessageConverts()方法来获取转换器的一个集合
List<HttpMessageConverter>
默认给AnnotationMethodHandlerAdapter初始化的有(当然我们也可以添加自定义的converter)
ByteArrayHttpMessageConverter
StringHttpMessageConverter
ResourceHttpMessageConverter
SourceHttpMessageConverter<T>
XmlAwareFormHttpMessageConverter
Jaxb2RootElementHttpMessageConverter
MappingJacksonHttpMessageConverter
Spring是如何寻找最佳的HttpMessageConverter
1 首先获取注册的所有HttpMessageConverter集合
2 然后客户端的请求header中寻找客户端可接收的类型,
比如 Accept application/json,application/xml等,组成一个集合
3 所有的HttpMessageConverter 都有canRead和canWrite方法
返回值都是boolean,看这个HttpMessageConverter是否支持当前请求的读与写,读对应@RequestBody注解,
写对应@ResponseBody注解
4 遍历HttpMessageConverter集合与前面获取可接受类型进行匹配,如果匹配直接使用当前第一个匹配的HttpMessageConverter,然后return(一般是通过Accept和返回值对象的类型进行匹配)
例如
StringHttpMessageConverter
支持String , Accept所有类型
MappingJacksonHttpMessageConverter
支持Map List 实体对象等等 ,Accept:application/json
示例:
目标:
使用ResponseBody根据head的Accept不同对同一地址请求分别来呈现一个实体的json与xml结果
由于<context:annotation-config />
默认会初始化AnnotationMethodHanlderAdapter,但我们返回xml内容需要对这个HandlerAdapter进行一定的修改,所以配置文件如下:
<context:component-scan base-package="com.controls"
/>
<context:annotation-config />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"
>
<property name="messageConverters"
>
<list>
<ref bean="stringHttpMessageConverter"
/>
<ref bean="jsonHttpMessageConverter"
/>
<ref bean="marshallingHttpMessageConverter"
/>
</list>
</property>
</bean>
<bean id="stringHttpMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter"
/>
<bean id="jsonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
/>
<bean id="marshallingHttpMessageConverter"
class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"
>
<constructor-arg ref="jaxbMarshaller"
/>
<property name="supportedMediaTypes"
value="application/xml"
></property>
</bean>
<bean id="jaxbMarshaller"
class="org.springframework.oxm.jaxb.Jaxb2Marshaller"
>
<property name="classesToBeBound"
>
<list>
<value>com.model.User</value>
</list>
</property>
</bean>
注:要使用Jaxb2Marshaller
我们在对应的实体,比如User类上需要标明
@XmlRootElement 注解,需要引入
import
javax.xml.bind.annotation.XmlRootElement;
这个包。
Controller中应对请求的方法
@RequestMapping(value="/user/{userid}", method=RequestMethod.GET
)
public
@ResponseBody User queryUser(@PathVariable("userid") long
userID) {
Calendar d = Calendar.getInstance
();
d.set(1987, 12, 9);
User u = new
User();
u.setUserID(userID);
u.setUserName("zhaoyang");
u.setBirth(d.getTime());
return
u;
}
接着我们使用curl这个工具进行测试
如下图:
相关推荐
srping mvc test
activiti5.14+spring4.0+srping Mvc4.0+mybatis3.0.5+maven环境搭建,可以跑起来,并且可以逆向生成相关的数据库表
该案例都是最新的ssi 整合框架,并且log4j jdbc连接池都配好了,连接mysql,oracle 数据依赖的jar也在里面,里面只开发一个简单的增删改查功能,有需要的朋友可以自己下载下来进行扩展,或者拿来学习
本文详细介绍spring MVC的原理和开发心得体会。
主要给大家介绍了关于Spring MVC请求参数与响应结果全局加密和解密的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
spring框架的mvc, springMvc案例
spring mvc、spring、hibernate、bootstrap 框架整合开发的项目源码下载
代码简单易懂,将友盟的微信、qq等分享集合在一个类里面,直接拖带项目中,引用即可。
Spring-mvc Srping-boot spring-jdbc manven 整合实例
★ 通过学习Srping MVC框架达到设计真实Web应用的专业水准 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。Spring MVC4是当前...
此处是srping mvc整个框架代码类
通过学习Srping MVC框架达到设计真实Web应用的专业水准
springmvc配置文件
Spring MVC + Redis 应用实例,包括Srping MVC配置,spring和redis整合,以及简单的页面展示,提供写入内存的增删改查功能;编辑工具eclipse;代码本人调试过,可执行
Spring MVC 入门的简单例子,适合新手学习和研究,简单易懂。
入门经典,适用于新手学习入门,介绍了Spring开发组件的安装、配置,概念及特性,也适用于学习springboot之前的要点复习。
my srping java demomy srping java demo
Spring Framework开发参考: 1 13.9. 使用Spring的表单标签库 1 13.9.1. 配置 1 13.9.2. form标签 1 13.9.3....13.9.4....13.9.5....13.9.6....13.9.7....13.9.8....13.9.9....13.9.10....13.9.11....13.9.12....13.9.13....13.9.14....
中文版的 是spring reference, 英语不好兄弟么就凑合看
Srping Securty.html