Spring RESTful

3 篇文章 0 订阅

什么是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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

编写支持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);

    }; 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

测试结果:

这里写图片描述 
重要的是理解rest的设计思想,rest的思想讲解:http://www.ruanyifeng.com/blog/2014/05/restful_api.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值