当前位置: 首页 > news >正文

RestFul风格

概念

        Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

功能

        资源:互联网所有的事物都可以被抽象为资源

        资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作

        分贝对应 添加、删除、修改、查询

传统方式操作资源 :通过不同的参数来实现不同的效果,方法单一,post 和get

  • 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

        

测试

        1.新建一个类RestFulController.java

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class RestFulController {
    //http://localhost:8080/add?a=1&b=2
    @RequestMapping("/add")
    public String add(int a, int b, Model model) {
        int res = a + b;
        model.addAttribute("msg", "add结果为" + res);
        return "test";
    }
}

        2.启动tomcat,访问测试

        网址:http://localhost:8080/add?a=1&b=2

        3.新增一个restFul方式请求的方法  

    //http://localhost:8080/add/1/2
    @RequestMapping(value = "/add/{a}/{b}", method = RequestMethod.GET)
    public String add2(@PathVariable int a, @PathVariable int b, Model model) {
        int res = a + b;
        model.addAttribute("msg", "add2结果为" + res);
        return "test";
    }

          代码 @RequestMapping(value = "/add/{a}/{b}", method = RequestMethod.GET) 可化简为 @GetMapping( "/add/{a}/{b}") ,其运行结果相同

        4.启动Tomcat,访问测试

 

        5.用post方式请求,新增一个a.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>$Title$</title>
</head>
<body>

<form action="/add/1/2" method="post">
  <input type="submit"/>
</form>

</body>
</html>

        6.添加一个post方式的方法

    @RequestMapping(value = "/add/{a}/{b}", method = RequestMethod.POST)
    public String add4(@PathVariable int a, @PathVariable int b, Model model) {
        int res = a + b;
        model.addAttribute("msg", "add4结果为" + res);
        return "test";
    }

        代码 @RequestMapping(value = "/add/{a}/{b}", method = RequestMethod.POST) 可化简为 @PostMapping ( "/add/{a}/{b}"),其运行结果相同

        7.启动Tomcat,测试访问(http://localhost:8080/a.jsp)

 

小结

        SpringMVC的@RequestMapping 注解能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH

        所有的地址栏请求默认都会是 HTTP GET 类型的。

        方法级别的注解变体有如下几个:组合注解

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

        @GetMapping 是一个组合注解,平时使用的会比较多,它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。

        

使用路径变量的好处

  • 使路径变得更加简洁

  • 获得参数更加方便,框架会自动进行类型转换

  • 通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法,如这里访问是的路径是a/1/2,则路径与方法不匹配,而不会是参数转换失败

拓展

        场景一:我们都有过向别人(甚至可能向完全不会编程的人)提问及解释编程问题的经历,但是很多时候就在我们解释的过程中自己却想到了问题的解决方案,然后对方却一脸茫然。

        场景二:你的同行跑来问你一个问题,但是当他自己把问题说完,或说到一半的时候就想出答案走了,留下一脸茫然的你。

        其实上面两种场景现象就是所谓的小黄鸭调试法(Rubber Duck Debuging),又称橡皮鸭调试法,它是我们软件工程中最常使用调试方法之一。

相关文章:

  • git提交代码版本冲突问题
  • 交换机与路由技术-29-OSPF虚链路
  • Centos6普通用户获取最高权限方法
  • 极致CMS1.7 另一处前台SQL注入
  • 基于javaweb,ssm鲜花销售系统
  • 数据结构与算法:大小根堆和快速排序 解决TopK问题
  • 【ArkUI】对于Flex布局与基础组件声明式UI-组件封装父子组件相互绑定的运用【OpenHarmony/HarmonyOS】
  • java基于ssm+vue的企业通用进销存管理系统 element
  • K8S搭建
  • Python之简单飞机行李托运计费系统
  • React项目 浏览器控制台上的 WDS HMR 全称是什么
  • Java · 认识 String 类(上)· 创建字符串 · 字符串比较相等 · 字符串常量池 · 字符串不可变 · 字符字节与字符串
  • Visual Studio 调试启动时会卡几十秒钟
  • .NET 发展历程
  • 验证码生成工具google authenticator
  • JavaScript-如何实现克隆(clone)函数
  • canvas 五子棋游戏
  • Create React App 使用
  • docker容器内的网络抓包
  • js写一个简单的选项卡
  • KMP算法及优化
  • PHP变量
  • React-flux杂记
  • Redis学习笔记 - pipline(流水线、管道)
  • Redis中的lru算法实现
  • SpringBoot几种定时任务的实现方式
  • Vue学习第二天
  • 精彩代码 vue.js
  • 理解在java “”i=i++;”所发生的事情
  • 理清楚Vue的结构
  • 聊聊redis的数据结构的应用
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 山寨一个 Promise
  • 原生Ajax
  • 智能网联汽车信息安全
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #{}和${}的区别是什么 -- java面试
  • $.each()与$(selector).each()
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (3)(3.5) 遥测无线电区域条例
  • (pojstep1.1.2)2654(直叙式模拟)
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (ZT)出版业改革:该死的死,该生的生
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)正点原子I.MX6ULL u-boot移植
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (论文阅读30/100)Convolutional Pose Machines
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (十八)SpringBoot之发送QQ邮件
  • (四)模仿学习-完成后台管理页面查询
  • (转)四层和七层负载均衡的区别
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET 的程序集加载上下文
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)