首页 技术 正文
技术 2022年11月10日
0 收藏 479 点赞 3,197 浏览 2989 个字

 对于企业应用来说,数据是许多业务的命脉,软件通常是可替换的,但是多年积累的数据是永远不能替换的。 近些年来,以信息为中心的表述性状态转移(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中有一篇比较好的这方面的文章:http://www.infoq.com/cn/articles/rest-introduction 关于REST,可以将其首字母拆分以理解具体含义: 

  • 表述性(R),REST资源实际上可以用各种形式表述,包括XML,JSON甚至HTML;
  • 状态(S),当使用REST的时候,我们更关注资源的状态而不是对资源所采取的行为;
  • 转移(T),REST涉及转移资源数据,以另一种表述性形式从一个应用转移到另一个应用;

 Spring MVC Controller类的模型是非常灵活的,几乎所有的签名方法都可以用来处理web请求,可以非常容易地编写出RESTful Web服务。 REST中所有的事情都是通过URL来完成的,URL是统一资源定位符(Uniform Resource Location),可以被视为一种标识资源的方式。 
Spring MVC中发布Restful Web服务
  每个HTTP方法都具有两个特性:安全性和幂等性,如果一个方法不改变资源的状态,就认为它是安全的,幂等的方法可能改变也可能不改变状态,但是一次请求和多次请求具有相同的作用。我们关心的动作(get, post, put, delete)直接对应HTTP规范定义的4个方法: 
Spring MVC中发布Restful Web服务
  表述是REST中很重要的一个方面,是关于客户端和服务器端针对某一资源是如何通信的,任何给定的资源都几乎可以用任意的形式进行表述:如果资源的使用者愿意使用json,那么资源就可以用json格式来表述;如果用户在浏览器中查看资源的话,那么可能更愿意以HTML的方式来展现。资源并没有发生变化,只是表述方式变了。 正如在Restful HTTP方式中,可以选择组成http应用协议的通用接口访问服务程序,想象下面的方式设计并实现系统: 
Spring MVC中发布Restful Web服务
  下面就描述一下使用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。
Spring MVC中发布Restful Web服务
  可以看出,当前并没有实现REST的具体实现,后续会继续探讨一下Spring MVC的Java表述方式转移形式。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,487
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,486
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,126
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,287