一、什么是restful?

  Restful就是一个资源定位及资源操作的风格,其核心是面向资源。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。REST提出设计概念和准则为:

    1. 网络上的所有事物都可以被抽象为资源(resource)
    2. 每一个资源都有唯一的资源标识(resource identifier),对资源的操作不会改变这些标识
    3. 所有的操作都是无状态的

  REST简化开发,其架构遵循CRUD原则,该原则告诉我们对于资源(包括网络资源)只需要四种行为:创建(Create),获取(Retrieve),更新(Update)和删除(Delete)就可以完成相关的操作和处理。我们可以通过统一资源标识符(Universal Resource Identifier,URI)来识别和定位资源,并且针对这些资源而执行的操作是通过 HTTP 规范定义的。其支持的四种核心操作分别为:

  • GET – 获取信息/请求信息内容。绝大多数浏览器获取信息时使用该方式。
  • POST – 添加信息内容。显示曾经的信息内容,能够看作是insert操作
  • PUT – 更新信息内容。相当与update
  • DELETE – 删除信息内容能够看作是delete

  传统方式操作资源:

    • http://127.0.0.1/item/queryItem.action?id=1      查询,GET

    • http://127.0.0.1/item/saveItem.action                 新增,POST

    • http://127.0.0.1/item/updateItem.action             更新,POST

    • http://127.0.0.1/item/deleteItem.action?id=1      删除,GET或POST

  使用RESTful操作资源:

    • http://127.0.0.1/item/1          查询,GET

    • http://127.0.0.1/item              新增,POST

    • http://127.0.0.1/item              更新,PUT

    • http://127.0.0.1/item/1          删除,DELETE

二、RESTful入门案例

2.1 需求

  使用RESTful方式实现商品信息查询,返回json数据

2.2 从URL上获取参数

  使用RESTful风格开发的接口,根据id查询商品,接口地址是:http://127.0.0.1/item/1

  我们需要从url上获取商品id,步骤如下:

  1. 使用注解@RequestMapping("item/{id}")声明请求的url

    {xxx}叫做占位符,请求的URL可以是“item/1”或“item/2” 
  2. 使用(@PathVariable() Integer id)获取url上的数据
    /**
    * 使用RESTful风格开发接口,实现根据id查询商品
    *
    * @param id
    * @return
    */
    @RequestMapping("item/{id}")
    @ResponseBody
    public Item queryItemById(@PathVariable() Integer id) {
    Item item = this.itemService.queryItemById(id);
    return item;
    }

    如果@RequestMapping中表示为"item/{id}",id和形参名称一致,@PathVariable不用指定名称。如果不一致,例如"item/{ItemId}"则需要指定名称@PathVariable("itemId")。

  注意两个区别

  • @PathVariable是获取url上数据的。@RequestParam获取请求参数的(包括post表单提交)

  • 如果加上@ResponseBody注解,就不会走视图解析器,不会返回页面,而是返回json数据。如果不加,就走视图解析器,返回页面

SprimgMVC学习笔记(九)—— RESTful支持的更多相关文章

  1. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

  2. go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)

    目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...

  3. 多线程学习笔记九之ThreadLocal

    目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...

  4. MDX导航结构层次:《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九

    <Microsoft SQL Server 2008 MDX Step by Step>学习笔记九:导航结构层次   SQL Server 2008中SQL应用系列及BI笔记系列--目录索 ...

  5. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...

  6. Go语言学习笔记九: 指针

    Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...

  7. Python学习笔记九

    Python学习笔记之九 为什么要有操作系统 管理硬件,提供接口. 管理调度进程,并且将多个进程对硬件的竞争变得有序. 操作系统发展史 第一代计算机:真空管和穿孔卡片 没有操作系统,所有的程序设计直接 ...

  8. go 学习笔记之是否支持以及如何实现继承

    熟悉面向对象的小伙伴们可能会知道封装,继承和多态是最主要的特性,为什么前辈们会如此看重这三种特性,真的那么重要吗? 什么是封装 什么是封装,封装有什么好处以及怎么实现封装? 相信大多数小伙伴们都有自己 ...

  9. C#线程学习笔记九:async & await入门二

    一.异步方法返回类型 只能返回3种类型(void.Task和Task<T>). 1.1.void返回类型:调用方法执行异步方法,但又不需要做进一步的交互. class Program { ...

  10. vue学习笔记(九)vue-cli中的组件通信

    前言 在上一篇博客vue学习笔记(八)组件校验&通信中,我们学会了vue中组件的校验和父组件向子组件传递信息以及子组件通知父组件(父子组件通信),上一篇博客也提到那是对组件内容的刚刚开始,而本 ...

随机推荐

  1. Android studio导入svn工程

    Quick Start——> Check outproject from Version——> Subversion——> ‘+’加号 ——> 输入网址 ——> 注意选择 ...

  2. spring整合web项目演示

  3. C run-time函数总览

    Argument Access(参数访问):变长参数列表.这个模块提供了三个宏:va_arg.va_end和va_start,用来实现变长参数列表的访问. Buffer Manipulation(内存 ...

  4. 【整理】使用AIDL跨进程传递复杂对象的实践例子

    首先定义对象类,并实现Parcelable接口,实现接口内的几个方法,看代码,Person.java package com.example.u3.aidltest; import android.o ...

  5. VS项目模板文件位置

    目录: D:\Users\lyn\Documents\Visual Studio 2012\Templates\ProjectTemplates   模板文件完整路径: D:\Users\lyn\Do ...

  6. SSM项目连接远程Linux服务器的mysql 启动tomcat卡在了 Initializing Spring root WebApplicationContext

    网上查了原因, linux下mysql访问速度缓慢并且ssh连接缓慢的原因 解决办法: 1.linux ssh连接慢 最近发现ssh连接的时候却很慢,ping的速度非常好,让人误以为是ssh连接不上. ...

  7. JDBC03 利用JDBC实现事务提交与回滚【调用Connection中的方法实现事务管理】

    目录 1 Connection中的重用方法 2 JDBC事务管理经典案例 1 Connection类中常用的方法回顾 1.1 Statement createStatement() throws SQ ...

  8. winform 公共控件 ListView

    //数据显示,刷新 public void F5() { listView1.Items.Clear(); List<Students> Stu = new StudentsData(). ...

  9. Python 网络爬虫 007 (编程) 通过网站地图爬取目标站点的所有网页

    通过网站地图爬取目标站点的所有网页 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 2016 ...

  10. java中是如何解决编码问题的,比如char类型的对象是如何存储的呢?

    主题句:每个编码形式将字符从字符集转换为编码数据. 说白了一个代码点就是一个Unicode字符.代码单元就是代码点的集合. 字符视图 要了解字符集标准,您必须能区分三种不同的字符视图: 字符集(字符的 ...