对于企业应用来说,数据是许多业务的命脉,软件通常是可替换的,但是多年积累的数据是永远不能替换的。
 
近些年来,以信息为中心的表述性状态转移(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 Web服务的更多相关文章

  1. SpringBoot实战(十)之使用Spring Boot Actuator构建RESTful Web服务

    一.导入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...

  2. CRUD using Spring MVC 4.0 RESTful Web Services and AngularJS

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  3. [译]Spring Boot 构建一个RESTful Web服务

    翻译地址:https://spring.io/guides/gs/rest-service/ 构建一个RESTful Web服务 本指南将指导您完成使用spring创建一个“hello world”R ...

  4. 使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务

    原文地址:http://www.ibm.com/developerworks/cn/web/wa-restful/ 简介: Spring,构建 Java™ 平台和 Enterprise Edition ...

  5. Spring MVC 4实现RESTFul WebServices的CRUD实例和使用RestTemplate进行请求(全注解形式配置Web和Filter)

    在这篇文章中,我们将使用Spring4 MVC编写一个CRUD RESTful Web服务,写一个REST客户端RestTemplate来使用这些服务.我们也将利用外部客户端测试的服务. 下面将展示核 ...

  6. 使用 Spring 3 来创建 RESTful Web Services(转)

    使用 Spring 3 来创建 RESTful Web Services 在 Java™ 中,您可以使用以下几种方法来创建 RESTful Web Service:使用 JSR 311(311)及其参 ...

  7. Spring MVC 中的REST支持

    本部分提供了支持 RESTful web 服务的主要 Spring 功能(或注释)的概述. @Controller 使用 @Controller 注释对将成为 MVC 中控制器的类进行注释并处理 HT ...

  8. 使用 Spring Boot Actuator 构建 RESTful Web 应用

    Spring Boot Actuator 是 Spring Boot 的一个子项目.通过它,可以很轻易地为应用提供多种生产级服务.本教程中,你将通过构建一个应用来学习如何添加这些服务. 1. 你需要构 ...

  9. Spring MVC 中的基于注解的 Controller【转】

    原文地址:http://my.oschina.net/abian/blog/128028 终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 H ...

随机推荐

  1. 不用storyboard,用xib开发

    1. 新建一个Single View Application项目, 删除自动生成的.storyboard文件和ViewController文件 2. 新建一个UIViewController的子类,命 ...

  2. Week08《Java程序设计》第八次学习总结

    Week08<Java程序设计>第八次学习总结 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 答: 2.书面作业 1. ArrayList代码分析 1.1 解 ...

  3. window环境下创建Flask项目需要安装常见模块命令

    安装Flask环境 pip install flask==0.10.1 使用命令行操作 pip install flask-script 创建表单 pip install flask-wtf 操作数据 ...

  4. PentesterLab-From SQL Injection to Shell

    一.打开靶机ip出现如下界面: 随便点一下,点到test链接,访问了如下url:http://192.168.109.131/cat.php?id=1,这里出现了一个id,常规思路这个位置可能有sql ...

  5. zabbix安装收获-WARNING: 'aclocal-1.14' is missing on your system

    zabbix server已经安装成功了,在server端也安装了一个agent,一切OK. 在另外一台pg节点上安装zabbix agent时,报错: WARNING: 'aclocal-1.14' ...

  6. VM遇到的问题参考

    http://saturn.blog.51cto.com/184463/950731/

  7. tensorflow_gpu-1.2.1-cp35-cp35m-win_amd64.whl文件怎么安装?

    当你从迅雷下载之后,怎么样来安装上面的文件呢? 这也是一个问题,对于新手来说,是不知道的.其实比较简单,如下: 用命令:pip  install tensorflow_gpu-1.2.1-cp35-c ...

  8. 同一台电脑的多ssh 配置

    转载自:https://w3ctrain.com/2016/03/06/mutiple-ssh-key/ ps:此文基于你已经能够正常的生成sshkey 对于sshkey的功能这里就不多做介绍了,本文 ...

  9. 折腾 Phalcon 的笔记

    不要用 IIS!Apache 万岁! 不要用 Web Platform Installer!自己动手丰衣足食! 注意版本号.TS 与 NonTS.x86 与 x64 的区别! 关于 Apache 的配 ...

  10. UWP 中的 LaunchUriAsync,使用默认浏览器或其他应用打开链接

    古老的 Win32 应用启动其他程序太过方便,以至于一部分开发者都已经不记得 Windows 能通过关联协议的方式通过统一资源定位符(URI)来启动应用程序了. 转到 UWP 后,使用 URI 启动应 ...