@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这个工具进行测试
如下图:
相关推荐
本项目是关于"activiti+spring+spring Mvc+mybatis+maven"的整合,旨在创建一个基于Activiti工作流引擎、Spring、Spring MVC、MyBatis以及Maven的开发环境。下面将详细介绍这些技术及其整合过程。 首先,`activiti`...
在Spring MVC中,我们可以使用@RequestBody注解来处理请求参数,并使用 EncryptUtils 工具类来进行加密和解密。EncryptUtils 工具类提供了sha()方法来生成签名,createAesCipher()方法来创建AES加密器。 在控制器...
Spring MVC 是一个强大的Java Web开发框架,用于构建高效、可维护的Web应用程序。它基于Spring框架,提供了模型-视图-控制器(MVC)架构模式的实现,简化了Web应用的开发过程。在这个名为“maven-spring-mvc”的...
Spring MVC 是 Spring 框架的一个模块,专为构建基于模型-视图-控制器(Model-View-Controller)架构的Web应用程序。它提供了一个灵活的、可配置的环境,允许开发者将关注点分离到单独的组件上,从而提高代码的可...
该案例都是最新的ssi 整合框架,并且log4j jdbc连接池都配好了,连接mysql,oracle 数据依赖的jar也在里面,里面只开发一个简单的增删改查功能,有需要的朋友可以自己下载下来进行扩展,或者拿来学习
在IT行业中,Spring MVC、Spring、Hibernate和Bootstrap是四个非常重要的框架,它们分别在Web开发的不同层面上发挥着关键作用。下面将详细解释这四个框架的功能、整合方式以及它们在项目开发中的应用。 1. Spring ...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在 Spring MVC 中,配置文件起着至关重要的作用,它定义了应用程序...
在移动应用开发中,友盟分享集合是一种常见的功能整合方式,它使得开发者能够方便地将微信、QQ等社交平台的分享功能集成到自己的应用程序中。本文将深入探讨友盟分享集合的相关知识点,以及如何将其有效地引入到项目...
例如,可以使用`@RequestParam`、`@PathVariable`、`@RequestHeader`、`@RequestBody`等注解来实现不同类型的参数绑定: ```java @PostMapping("/example") public String example(@RequestParam("name") String ...
Spring MVC、Spring Boot和Spring JDBC是Java开发中的三大核心框架,它们在构建高效、可扩展的Web应用程序中扮演着至关重要的角色。这篇文章将深入探讨这三个框架的原理、用途以及它们如何协同工作。 **Spring MVC*...
Spring MVC + Redis 应用实例,包括Srping MVC配置,spring和redis整合,以及简单的页面展示,提供写入内存的增删改查功能;编辑工具eclipse;代码本人调试过,可执行
本教程将通过一个简单的例子来介绍如何入门 Spring MVC。 ### 1. Spring MVC 架构 Spring MVC 的设计基于 MVC 设计模式,它将业务逻辑、数据和用户界面分离,使得开发更加模块化,易于维护。主要组件包括: - **...
这些标签是Spring Web MVC模块的一部分,能够与Spring的模型绑定机制无缝集成,简化了前端到后端的数据传递。 113.9.1. **配置** 在使用Spring的表单标签库之前,需要在JSP页面中引入Spring的Taglib。这通常在页面...
my srping java demomy srping java demo
Spring是一个开源的Java平台,它最初由Rod Johnson创建,并且首个版本发布于2003年。Spring框架的核心特性是支持依赖注入(DI)和面向切面编程(AOP),这些特性的目的是为了简化企业级应用开发。...
"Web层"章节主要讨论Spring MVC,这是一个强大的Web框架,用于构建RESTful服务和传统的Web应用程序。这里会讲解控制器、模型视图、数据绑定、验证以及视图解析等内容,帮助开发者创建高效、可测试的Web应用。 除此...
Spring MVC 和 MyBatis 是两个在 Java Web 开发中广泛使用的框架。Spring MVC 作为 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序,而 MyBatis 是一个优秀的持久层框架,它...
"Srping例子"这个压缩包可能包含了一个简单的Spring入门示例,"HelloWordSpring"可能是该示例的主程序或源代码文件。 在Spring框架中,`HelloWordSpring`可能是一个初始化的项目,用于演示如何配置和启动Spring环境...
Srping Securty.html
'SpringDataJPA从入门到精通'分为12章 内容包括整体认识JPA、JPA基础查询方法、定义查询方法、注解式查询方法、@Entity实例里面常用注解详解、JpaRepository扩展详解、JPA的MVC扩展REST支持、DataSource的配置、乐观...