`
squall140
  • 浏览: 146280 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Srping MVC 入门 @ResponseBody & @RequestBody

 
阅读更多

转自:http://www.cnblogs.com/zhaoyang/archive/2012/01/07/2315436.html


@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+srping Mvc+mybatis+maven整合

    本项目是关于"activiti+spring+spring Mvc+mybatis+maven"的整合,旨在创建一个基于Activiti工作流引擎、Spring、Spring MVC、MyBatis以及Maven的开发环境。下面将详细介绍这些技术及其整合过程。 首先,`activiti`...

    Spring MVC请求参数与响应结果全局加密和解密详解

    在Spring MVC中,我们可以使用@RequestBody注解来处理请求参数,并使用 EncryptUtils 工具类来进行加密和解密。EncryptUtils 工具类提供了sha()方法来生成签名,createAesCipher()方法来创建AES加密器。 在控制器...

    srping mvc test

    Spring MVC 是一个强大的Java Web开发框架,用于构建高效、可维护的Web应用程序。它基于Spring框架,提供了模型-视图-控制器(MVC)架构模式的实现,简化了Web应用的开发过程。在这个名为“maven-spring-mvc”的...

    springMvc案例

    Spring MVC 是 Spring 框架的一个模块,专为构建基于模型-视图-控制器(Model-View-Controller)架构的Web应用程序。它提供了一个灵活的、可配置的环境,允许开发者将关注点分离到单独的组件上,从而提高代码的可...

    spring4.2+srping mvc+mybatis3.3+log4j 整合案例

    该案例都是最新的ssi 整合框架,并且log4j jdbc连接池都配好了,连接mysql,oracle 数据依赖的jar也在里面,里面只开发一个简单的增删改查功能,有需要的朋友可以自己下载下来进行扩展,或者拿来学习

    spring mvc、spring、hibernate、bootstrap 框架整合开发的项目源码下载

    在IT行业中,Spring MVC、Spring、Hibernate和Bootstrap是四个非常重要的框架,它们分别在Web开发的不同层面上发挥着关键作用。下面将详细解释这四个框架的功能、整合方式以及它们在项目开发中的应用。 1. Spring ...

    springmvc配置文件

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在 Spring MVC 中,配置文件起着至关重要的作用,它定义了应用程序...

    友盟分享集合

    在移动应用开发中,友盟分享集合是一种常见的功能整合方式,它使得开发者能够方便地将微信、QQ等社交平台的分享功能集成到自己的应用程序中。本文将深入探讨友盟分享集合的相关知识点,以及如何将其有效地引入到项目...

    Spring拦截器,高级参数绑定

    例如,可以使用`@RequestParam`、`@PathVariable`、`@RequestHeader`、`@RequestBody`等注解来实现不同类型的参数绑定: ```java @PostMapping("/example") public String example(@RequestParam("name") String ...

    Spring-mvc Srping-boot spring-jdbc

    Spring MVC、Spring Boot和Spring JDBC是Java开发中的三大核心框架,它们在构建高效、可扩展的Web应用程序中扮演着至关重要的角色。这篇文章将深入探讨这三个框架的原理、用途以及它们如何协同工作。 **Spring MVC*...

    Spring MVC + Redis 应用实例

    Spring MVC + Redis 应用实例,包括Srping MVC配置,spring和redis整合,以及简单的页面展示,提供写入内存的增删改查功能;编辑工具eclipse;代码本人调试过,可执行

    Java Spring MVC 简单的例子

    本教程将通过一个简单的例子来介绍如何入门 Spring MVC。 ### 1. Spring MVC 架构 Spring MVC 的设计基于 MVC 设计模式,它将业务逻辑、数据和用户界面分离,使得开发更加模块化,易于维护。主要组件包括: - **...

    spring mvc标签使用指南

    这些标签是Spring Web MVC模块的一部分,能够与Spring的模型绑定机制无缝集成,简化了前端到后端的数据传递。 113.9.1. **配置** 在使用Spring的表单标签库之前,需要在JSP页面中引入Spring的Taglib。这通常在页面...

    my srping java demo

    my srping java demomy srping java demo

    Srping4经典教程

    Spring是一个开源的Java平台,它最初由Rod Johnson创建,并且首个版本发布于2003年。Spring框架的核心特性是支持依赖注入(DI)和面向切面编程(AOP),这些特性的目的是为了简化企业级应用开发。...

    srping中文reference

    "Web层"章节主要讨论Spring MVC,这是一个强大的Web框架,用于构建RESTful服务和传统的Web应用程序。这里会讲解控制器、模型视图、数据绑定、验证以及视图解析等内容,帮助开发者创建高效、可测试的Web应用。 除此...

    Spring-mvc mybatis 简单结合架包

    Spring MVC 和 MyBatis 是两个在 Java Web 开发中广泛使用的框架。Spring MVC 作为 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序,而 MyBatis 是一个优秀的持久层框架,它...

    Srping例子

    "Srping例子"这个压缩包可能包含了一个简单的Spring入门示例,"HelloWordSpring"可能是该示例的主程序或源代码文件。 在Spring框架中,`HelloWordSpring`可能是一个初始化的项目,用于演示如何配置和启动Spring环境...

    Srping Securty.html

    Srping Securty.html

    Spring Data JPA从入门到精通

    'SpringDataJPA从入门到精通'分为12章 内容包括整体认识JPA、JPA基础查询方法、定义查询方法、注解式查询方法、@Entity实例里面常用注解详解、JpaRepository扩展详解、JPA的MVC扩展REST支持、DataSource的配置、乐观...

Global site tag (gtag.js) - Google Analytics