对于企业应用来说,数据是许多业务的命脉,软件通常是可替换的,但是多年积累的数据是永远不能替换的。
近些年来,以信息为中心的表述性状态转移(Representational State Transfer, REST)已成为替换传统SOAP Web服务的流行方案,为了帮助Spring开发人员,Spring3.0以上的版本中封装了对REST的良好支持。Spring对REST的支持是构建在Spring MVC上的。
相对于SOAP,REST提供了一个更简单的可选方案,问题在于并不是每个人都清楚了解REST到底是什么。REST并不是简单的“基于URL的Web服务”,不能将其看作是另一种类型的远程过程调用机制。
REST与RPC几乎没有任何关系,RPC是面向服务的,其关注的是行为和动作;而REST是面向资源的,强调描述应用程序的事物和名词。尽管URL在REST中起到了关键作用,但他们仅仅是整体的一部分而已。
为什么使用REST,InfoQ中有一篇比较好的这方面的文章:
关于REST,可以将其首字母拆分以理解具体含义:
- 表述性(R),REST资源实际上可以用各种形式表述,包括XML,JSON甚至HTML;
- 状态(S),当使用REST的时候,我们更关注资源的状态而不是对资源所采取的行为;
- 转移(T),REST涉及转移资源数据,以另一种表述性形式从一个应用转移到另一个应用;
Spring MVC Controller类的模型是非常灵活的,几乎所有的签名方法都可以用来处理web请求,可以非常容易地编写出RESTful Web服务。
REST中所有的事情都是通过URL来完成的,URL是统一资源定位符(Uniform Resource Location),可以被视为一种标识资源的方式。

每个HTTP方法都具有两个特性:安全性和幂等性,如果一个方法不改变资源的状态,就认为它是安全的,幂等的方法可能改变也可能不改变状态,但是一次请求和多次请求具有相同的作用。我们关心的动作(get, post, put, delete)直接对应HTTP规范定义的4个方法:

表述是REST中很重要的一个方面,是关于客户端和服务器端针对某一资源是如何通信的,任何给定的资源都几乎可以用任意的形式进行表述:如果资源的使用者愿意使用json,那么资源就可以用json格式来表述;如果用户在浏览器中查看资源的话,那么可能更愿意以HTML的方式来展现。资源并没有发生变化,只是表述方式变了。
正如在Restful HTTP方式中,可以选择组成http应用协议的通用接口访问服务程序,想象下面的方式设计并实现系统:

下面就描述一下使用Spring MVC来实现REST, 设置Spring MVC的注解驱动功能:
<!-- 启动注解驱动的spring mvc功能,注册请求url和注解pojo类方法的映射 --> <mvc:annotation-driven/> <!-- 启动包扫描功能,以便注册带有@controller,@service,@repository,@component等注解的类为spring的bean --> <context:component-scan base-package=“com.xxx.framework" />
Controller的实现类如下:
@Controller @RequestMapping(value = "/tasks") public class TasksController { @RequestMapping(value = "/{id}", method = RequestMethod.PUT) @ResponseStatus(HttpStatus.NO_CONTENT) public void putTaskRequest(@PathVariable("id") long id, @Valid String content) { System.out.println("put"); } @RequestMapping(method = RequestMethod.POST) @ResponseStatus(HttpStatus.CREATED) public TaskDefinition createTaskRequest() { System.out.println("post"); return null; } @RequestMapping(value = "/{id}", method = RequestMethod.GET) @ResponseStatus(HttpStatus.NO_CONTENT) public void showTaskContent(@PathVariable("id") long id) { System.out.println(id); } @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) @ResponseStatus(HttpStatus.NO_CONTENT) public void killTaskRequest(@PathVariable("id") long id) { System.out.println("kill"); }
启动Web Server后,将会在Console中显示出Spring MVC注册的相应信息:
23:18:14,723 INFO DefaultAnnotationHandlerMapping:315 - Mapped URL path [/tasks/{id}] onto handler 'tasksController' 23:18:14,724 INFO DefaultAnnotationHandlerMapping:315 - Mapped URL path [/tasks/{id}.*] onto handler 'tasksController' 23:18:14,724 INFO DefaultAnnotationHandlerMapping:315 - Mapped URL path [/tasks/{id}/] onto handler 'tasksController' 23:18:14,724 INFO DefaultAnnotationHandlerMapping:315 - Mapped URL path [/tasks] onto handler 'tasksController' 23:18:14,725 INFO DefaultAnnotationHandlerMapping:315 - Mapped URL path [/tasks.*] onto handler 'tasksController' 23:18:14,725 INFO DefaultAnnotationHandlerMapping:315 - Mapped URL path [/tasks/] onto handler 'tasksController'
在最后实现完成,可以用idea中的REST Client工具测试一下,这个小工具可以提供编辑http方法,地址以及路径,并查看最终的Response和Headers。

可以看出,当前并没有实现REST的具体实现,后续会继续探讨一下Spring MVC的Java表述方式转移形式。
相关推荐
在本文中,我们将深入探讨如何利用Spring MVC创建RESTful服务,这些服务可以处理字符串、JSON和XML数据,并且是用Maven构建的。我们将讨论关键概念、配置、以及如何构建可直接运行的项目。 1. **RESTful服务**:...
本教程将通过一个名为"spring-mvc-demo"的项目,详细介绍如何使用Spring框架来实现RESTful Web服务。 一、Spring MVC与RESTful Web服务 Spring MVC是Spring框架的一部分,专门用于处理Web请求和响应。RESTful Web...
本压缩包文件“自动配置和Spring MVC来创建一个RESTful Web服务.rar”提供了一个详细指南,教你如何利用Spring Boot和Spring MVC创建RESTful Web服务。以下是关于这些知识点的详细解释: 1. **Spring Boot**: ...
总之,使用Spring 3 MVC创建RESTful Web服务,能够高效地构建可伸缩、易于理解和维护的API。通过理解REST原则和熟练运用Spring MVC的注解,开发者可以轻松地将业务逻辑转化为符合RESTful风格的HTTP操作。
Building RESTful Web Services with Spring 5 – Second Edition: Leverage the power of Spring 5.0, Java SE 9, and Spring Boot 2.0 Find out how to implement the REST architecture to build resilient ...
通过理解和灵活运用 Spring MVC 中的 HttpMessageConverter,我们可以创建高效、可扩展且易于维护的 RESTful Web 服务。无论是处理简单的文本数据还是复杂的 JSON 或 XML 结构,HttpMessageConverter 都能提供强大的...
在本文中,我们将深入探讨如何在Spring 3.0中整合MVC框架与RESTful服务,并结合Maven构建项目。RESTful(Representational State Transfer)是一种软件架构风格,用于设计网络应用程序,尤其适用于Web服务。Spring ...
- 配置 Spring MVC 的核心组件 `DispatcherServlet`,在 `web.xml` 中定义 Servlet 配置。 3. **创建 REST 控制器(Controller)** - 使用 `@RestController` 注解标记控制器类,表示该类中的方法将处理 HTTP ...
描述中的“spring4 mvc restful web json”进一步强调了在Spring 4 MVC上下文中使用RESTful Web服务和JSON数据格式。Spring MVC是Spring框架的一部分,用于构建Web应用程序。通过RESTful设计,我们可以创建资源导向...
除此之外,教程可能还会涵盖Spring MVC的RESTful API设计,如何创建JSON响应,以及使用Spring Boot快速构建Spring MVC应用。Spring Boot简化了配置,提供了预配置的依赖,使得开发者能更快地启动项目。 错误处理和...
14. **RESTful风格**:Spring MVC支持创建RESTful Web服务,利用HTTP方法(GET、POST、PUT、DELETE等)来表示资源的不同操作。 15. **整合其他技术**:Spring MVC可以轻松集成其他技术,如MyBatis、Hibernate等持久...
此外,Spring MVC 4还支持RESTful风格的Web服务,通过@RequestMapping注解的produces和consumes属性,可以处理不同格式的HTTP请求和响应,如JSON、XML等。 总的来说,"Mastering Spring MVC 4(2015.09)源码"提供了...
在现代Web开发中,构建RESTful服务已经成为标准实践,它以简洁、无状态的方式提供了HTTP接口,便于客户端和服务器之间的数据交互。Spring4 MVC作为Java领域最流行的MVC框架之一,提供了一流的支持来构建RESTful API...
Spring MVC支持构建RESTful服务,通过HTTP方法如GET、POST、PUT、DELETE等,实现资源的增删改查操作。 **8. 自动配置与依赖注入** 利用Spring Boot的自动配置和Spring的依赖注入,开发者可以轻松地配置和管理Spring...
在本课程中,我们将深入探讨如何使用Java和Spring框架构建RESTful Web服务。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,以数据资源为中心,提供简洁、统一的...
3. **RESTful支持**:Spring MVC提供了对RESTful风格的HTTP方法(如GET、POST、PUT、DELETE等)的优秀支持,便于构建符合REST原则的Web服务。 4. **ModelAndView对象的改进**:此版本对`ModelAndView`对象进行了...
Spring MVC是Spring框架的一个核心模块,专为构建Web应用程序提供模型-视图-控制器(MVC)架构。在Spring MVC 4.0版本中,它引入了许多改进和新特性,以提升开发效率和应用程序的性能。 1. **依赖注入**:Spring ...
**Spring MVC RESTful 示例** Spring MVC 是 Spring 框架的一部分,它主要用于构建 Web 应用程序,尤其是处理 HTTP 请求和响应。...总之,Spring MVC 提供了强大的工具和库来构建高质量、高效的 RESTful Web 服务。
Spring MVC、CXF和Web Service是企业级Java应用开发中的三个关键组件,它们分别在不同的层面上服务于构建高效、可扩展的Web应用程序。 Spring MVC,全称Spring Model View Controller,是Spring框架的一部分,专为...