您的位置:首页 > 编程语言 > Java开发

RestFul简介以及在springmvc中的应用

2016-05-05 17:22 417 查看

什么是rest?

什么是rest?当我看到这个词的时候,我也不知道,我还以为是休息,最后查了一下,做web开发必须要知道rest

好了,就来简单介绍一下rest

rest即Representational State Transfer,表现层状态转化

互联网上资源(是服务)细化理解为一个url,如果访问某个资源通过http url访问。

我们把”资源”具体呈现出来的形式,叫做它的”表现层”(Representation)

表现层对用户展示的形式:html、json、xml、pdf、图片。。

由于http协议的限制,服务器和客户端不能实现主动通信,只能有客户端发起请求服务端响应请求,也就是将请求方法和参数都包含url,

使用rest和不使用rest的规则都是这样做的,但是rest对于url做了很好的规划,这个规则将方法和资源分开看起来做的很简单,但是却使我们更好理解了,上网无非就是对于网络资源的操作,网络资源在internet中直白点说就是url(个人理解)所以如果客户端想要操作服务器,必须通过某种手段,让服务器端发生”状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是”表现层状态转化”。

GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源

RESTful就是对http最全面最好的诠释,RESTful就是进行互联网开发的理念、思想。

RESTful开发中url的规范:

1、url规范

原始url:http://www……/queryItems.action?type=101&id=111

规范后:http://wwww…/item/101/1

比如:

对商品查询

url:http://wwww…/item/101/1 表示对101分类 下的1号商品查询

http请求方法设置为get

比如:

对商品删除

url:http://wwww…/item/101/1表示对101分类 下的1号商品删除

http请求方法设置为delete

rest向客户端发送数据

在请求时指定服务端给客户端响应的内容类型是什么?

实现:在请求时设置http头中Accept

对商品查询,以json格式展示:

rest设置:

url为:http://wwww…/item/101/1

客户端请求此url并且设置Accept为”applicatoin/json”

服务端处理方法:

接收请求,解析Accept,根据指定类型返回不同的内容格式。

如果解析到Accept为”applicatoin/json”,服务端就将内容转成json输出

如果解析到Accept为”applicatoin/xml”,服务端就将内容转成xml输出

RESTful架构的特点:

综合上面的解释,我们总结一下什么是RESTful架构:

  (1)每一个URI代表一种资源;

实现:

规范后的url规范后:http://wwww…/item/101/1,特点是参数通过url传递。

  (2)客户端和服务器之间,传递这种资源的某种表现层;

实现:

服务端解析Accept,根据客户端的要求将内容进行输出。

  (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。

实现:

服务解析客户端请求的http方法,根据不同的方法执行不同的service操作。

rest在spingmvc中实际操作

1.首先在web.xml中配置支持rest风格的前端控制器,即过滤所有路径

<!-- 配置springmvc的rest风格的url解析, -->
<servlet>
<servlet-name>springmvc-rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 初始参数 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>springmvc-rest</servlet-name>
<!--    注意这个是重点 -->
<url-pattern>/</url-pattern>
</servlet-mapping>


编写支持rest的controler方法,使用注解完成,简单:

package com.leige.controler;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.leige.domain.Student;
import com.leige.service.StudentService;

@Controller
@RequestMapping("/rest")
public class RestControler {
//注入service
@Autowired
@Qualifier(value="studentService")
StudentService studentService;
/**
* @param sid
* @return返回json
*
*
* @PathVariable将url中的路作为参数赋给方法
* ,注意路径使用占位符
*/
@RequestMapping(value="/testRest/{sid}")
public @ResponseBody Student testRest(@PathVariable("sid")Integer sid){

return studentService.selectStudent(sid);

};
}


测试结果:



重要的是理解rest的设计思想,rest的思想讲解:http://www.ruanyifeng.com/blog/2014/05/restful_api.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息