对于企业应用来说,数据是许多业务的命脉,软件通常是可替换的,但是多年积累的数据是永远不能替换的。
近些年来,以信息为中心的表述性状态转移(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表述方式转移形式。
相关推荐
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
使用Spring 3 来创建 RESTful Web Services
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 ...
spring4 mvc restful web json
这是一次大学任务,我们必须使用Spring MVC框架实现RestFUL Web服务。 有两个模型类:轮询和主持人。 轮询类保存可供用户使用的所有轮询的数据结构。 主持人类拥有将使用RestFUL Web服务资源进行轮询/投票的用户...
NULL 博文链接:https://liyaxi.iteye.com/blog/1463587
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
Springboot + Spring MVC大大简化了Web应用的RESTful开发,而Spring DataREST更简单。Spring Data REST是建立在DataRepository之上的,它能直接把resository以HATEOAS风格暴露成Web服务,而不需要再手写Controller层...
CreateSBApplication 这是一个基本的Spring Boot应用程序,它使用复数形式的课程从头开始创建,涵盖所有模块,包括使用Spring MVC集成创建RESTful Web应用程序,配置和访问数据源以及对其进行全面测试
Database interaction using Spring and Hibernate/JPA- Spring Data JPA- Spring Data MongoDB- Messaging, emailing and caching support- Spring Web MVC- Developing RESTful web services using Spring Web ...
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
REST支持被无缝整合到Spring的MVC层,它可以很容易应用到使用Spring构建的应用中。 Spring REST支持的主要特性包括: 注释,如@RequestMapping 和 @PathVariable,支持资源标识和URL映射 ...
JAX-RS(JSR 311)指的是Java API for RESTful Web Services,Roy Fielding也参与了JAX-RS的制订,他在自己的博士论文中定义了REST。对于那些想要构建RESTful Web Services的开发者来说,JAX-RS给出了不同于JAX-WS...
春暖花开 使用Spring MVC的静态Web服务
在精通Spring MVC4中,我们将会从头开始构建一个有用的Web应用。本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、...
fastser-web 基于spring mvc的restful项目,支持多版本
Over 40 recipes for creating cloud-ready Java web applications with Spring MVC About This Book Configure Spring MVC to build logic-less controllers that transparently support the most advanced web ...
具有Spring Boot、PostgreSQL、Hibernate、JUnit、Docker等的RESTful Web服务.zip