对于企业应用来说,数据是许多业务的命脉,软件通常是可替换的,但是多年积累的数据是永远不能替换的。
近些年来,以信息为中心的表述性状态转移(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操作。
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
通过理解和灵活运用 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框架的一部分,专为...