Rest 优雅的url请求处理风格及注意事项

😀前言
本篇博文是关于Rest 风格请求的应用和注意事项,希望能够帮助到您😊

🏠个人主页:晨犀主页
🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉
💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

文章目录

  • Rest 风格请求处理
    • 基本介绍
    • SpringBoot Rest 风格应用实例
      • 应用实例
    • Rest 风格请求-注意事项和细节
        • 注意
        • 小细节:思考
        • 解读:
    • 😄总结

Rest 风格请求处理

基本介绍

在这里插入图片描述

REST:即Representational State Transfer。(资源)表现层状态转化。是目前流行的请求方式。它结构清晰, 很多网站采用

  1. Rest 风格支持(使用HTTP 请求方式动词来表示对资源的操作)
  2. 举例说明:
    ● 请求方式: /monster
    ● GET-获取怪物
    ● DELETE-删除怪物
    ● PUT-修改怪物
    ● POST-保存妖怪

SpringBoot Rest 风格应用实例

需求: 演示SpringBoot 中如何实现Rest 风格的增删改查

image-20230811143826801

应用实例

1.创建com/nlc/web/controller/MonsterController.java

@RestController
//@Controller
public class MonsterController {//等价的写法//@RequestMapping(value = "/monster",method = RequestMethod.GET)@GetMapping("/monster")public String getMonster() {return "GET-查询妖怪";}//等价写法//@RequestMapping(value = "/monster", method = RequestMethod.POST)@PostMapping("/monster")public String saveMonster() {return "POST-添加妖怪";}//等价写法//@RequestMapping(value = "/monster",method = RequestMethod.PUT)@PutMapping("/monster")public String putMonster() {return "PUT-修改妖怪~~";}//等价写法//@RequestMapping(value = "/monster", method = RequestMethod.DELETE)@DeleteMapping("/monster")public String delMonster() {return "DELETE-删除妖怪";}}
  1. 使用Postman 完成测试, 请求url: http://localhost:8080/monster

image-20230811144036629

Rest 风格请求-注意事项和细节

1、客户端是PostMan 可以直接发送Put、delete 等方式请求,可不设置Filter
2、如果要SpringBoot 支持页面表单的Rest 功能, 则需要注意如下细节

注意

  1. Rest 风格请求核心Filter :HiddenHttpMethodFilter:浏览器form 表单只支持GET 与POST 请求,而DELETE、PUT等method 并不支持,Spring 添加了一个过滤器,可以将这些请求转换为标准的http 方法,使得支持GET、POST、PUT 与DELETE 请求。
  2. 、HiddenHttpMethodFilter 在将post 转成delete / put 请求时,是按_method 参数名来读取的。
  3. 表单请求会被HiddenHttpMethodFilter 拦截, 获取到表单_method 的值, 再判断是PUT/DELETE/PATCH(注释: PATCH 方法是新引入的,是对PUT 方法的补充,用来对已知资源进行局部更新:https://segmentfault.com/q/1010000005685904)。
  4. 如果要SpringBoot 支持页面表单的Rest 功能, 需要在application.yml 启用filter 功能,否则无效。
  5. 修改application.yml 启用filter 功能。
spring:mvc:static-path-pattern: /res/** #修改静态资源访问的路径/前缀hiddenmethod:filter:enabled: true #启用了HiddenHttpMethodFilter,开启页面表单的Rest功能web:resources:#修改/指定 静态资源的访问路径/位置static-locations: ["classpath:/img/","classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/"]#String[] staticLocations
  1. 修改对应的页面, 自己测试即可.
  • 创建src\main\resources\public\rest.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>rest</title>
</head>
<body>
<h1>测试rest风格的url, 来完成请求.</h1>
<form action="/monster" method="post">u: <input type="text" name="name"><br/><!--    通过隐藏域传递_method 参数指定值--><!--如果要测试delete, put , 就打开下面的注释--><!-- <input type="hidden" name="_method" value="delete">--><input type="submit" value="点击提交">
</form>
</body>
</html>
  1. 完成测试, 注意url 是localhost:8080/res/rest.html, 如果希望url 是localhost:8080/rest.html, 将application.yml 文件的static-path-pattern: /res/** 注销即可

image-20230811163618503

image-20230811164100098

小细节:思考

为什么这里return “GET-查询妖怪”, 返回的是字符串, 而不是转发到对应的资源文件?

解读:

因为@ResController 是一个复合注解, 含有@ResponseBody, 所以springboot 底层(springmvc), 在处理return “xxx” 时, 会以@ResponseBody 注解进行解析处理, 即返回字符串"xxx", 而不会使用视图解析器来处理。
我们可以试一下, 如果我们把@RestController 改成@Controller , 当你访问getMonster() 时, 如果你有xxx.html就会转发到xxx.html , 如果没有xxx.html , 就会报404。
提示: 在测试时, 将xxx.html 放在main\resources\public\xxx.html 进行测试, 并在application.yml 配置视图解析器

@GetMapping("/monster")
public String getMonster() {return "GET-查询妖怪";
}

—在application.yml 配置解析器-----

spring:mvc:view:suffix: .html   #后缀prefix: /    #前缀

—提示: 测试完后, 把代码恢复原状-----

使用Postman 进行测试, 可能出现的问题和解决方案分析.

image-20230811165122138

如何解决

spring:mvc:
#    static-path-pattern: /res/** #修改静态资源访问的路径/前缀hiddenmethod:filter:enabled: true #启用了HiddenHttpMethodFilter,开启页面表单的Rest功能view:       #配置视图解析器suffix: .htmlprefix: /        #这里是需要注意 prefix需要和当前的static-path-pattern一致。如果不一致就无法访问到静态资源

😄总结

  1. 不含有@ResponseBody时, springboot 底层(springmvc) 在处理return “xxx” 时是有顺序的。
  2. 如果配置了视图解析器,就按照视图解析器来定位;如果没有配置视图解析器,就看controller有没有/xxx
  3. HiddenHttpMethodFilter 在将post 转成delete / put 请求时,是按_method 参数名来读取的。

😁热门专栏推荐
SpringBoot篇
SpringBoot容器–注解的使用
以数据为中心的标记语言–yaml
SpringBoot 自动配置–常用配置
Spring Boot介绍–快速入门–约定优于配置
安装Lombok–Lombok的常用注解说明及使用方法
SpringBoot 依赖管理和自动配置—带你了解什么是版本仲裁

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/37880.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应急响应-Webshell

文章目录 一、Webshell概述什么是WebshellWebshell分类基于编程语言基于文件大小/提供的功能多少 Webshell 检测方法 二、常规处置方法三、技术指南1、初步预判2、 Webshell排查3、Web日志分析&#xff08;查找攻击路径及失陷原因&#xff09;4、系统排查4.1 Windows4.2 Linux …

CSS中的position属性有哪些值,并分别描述它们的作用。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ static⭐ relative⭐ absolute⭐ fixed⭐ sticky⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那…

通达OA SQL注入漏洞【CVE-2023-4166】

通达OA SQL注入漏洞【CVE-2023-4166】 一、产品简介二、漏洞概述三、影响范围四、复现环境POC小龙POC检测工具: 五、修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损…

新的 Python URL 解析漏洞可能导致命令执行攻击

Python URL 解析函数中的一个高严重性安全漏洞已被披露&#xff0c;该漏洞可绕过 blocklist 实现的域或协议过滤方法&#xff0c;导致任意文件读取和命令执行。 CERT 协调中心&#xff08;CERT/CC&#xff09;在周五的一份公告中说&#xff1a;当整个 URL 都以空白字符开头时&…

gitlab修改远程仓库地址

目录 背景&#xff1a; 解决&#xff1a; 1.删除本地仓库关联的远程地址&#xff0c;添加新的远程仓库地址 2.直接修改本地仓库关联的远程仓库地址 3.打开.git隐藏文件修改远程仓库地址 4.拉取代码报错(git host key verification failed) 背景&#xff1a; 公司搬家&#…

image has dependent child images

问题&#xff1a;很多none的镜像无法被删除 解决过程&#xff1a; 1、通过 docker image prune -f 提示可删除为 0 2、直接进行删除报错&#xff1a; docker rmi 8f5116cbc201Error response from daemon: conflict: unable to delete 8f5116cbc201 (cannot be forced) - im…

银河麒麟安装php7.1.33

银河麒麟V10兼容CentOS 8 安装过程与CentOS类似。 TencentOS3.1安装PHPNginxredis测试系统_乐大师的博客-CSDN博客 可以参考之前我写的文章。 不过有2个细节不同&#xff0c;下面说下。 问题1&#xff1a;编译错误提示“error:off_t undefined” 解决方法&#xff1a; 编…

宋浩线性代数笔记(五)矩阵的对角化

本章的知识点难度和重要程度都是线代中当之无愧的T0级&#xff0c;对于各种杂碎的知识点&#xff0c;多做题复盘才能良好的掌握&#xff0c;良好掌握的关键点在于&#xff1a;所谓的性质A与性质B&#xff0c;是谁推导得谁~

Ubuntu22.04复现SHADEWACHER(手动安你就慢了)

因为我是打算跑TC数据集&#xff0c;所以跳过audit安装。 我的Ubuntu使用的是清华源。 1. Parser Setup 1.1 g apt install g1.2 neo4j Ubuntu22.04换什么源都会导致无法定位软件包&#xff0c;添加neo4j的官方源又会导致不信任的源。 22.04以下的版本&#xff0c;直接用命…

MySQL 根据多字段查询重复数据

MySQL 根据多字段查询重复数据 在实际的数据库应用中&#xff0c;我们经常需要根据多个字段来查询重复的数据。MySQL 提供了一些方法来实现这个功能&#xff0c;让我们能够快速准确地找到和处理重复数据。本文将介绍如何使用 MySQL 来根据多字段查询重复数据&#xff0c;并提供…

SIFT 算法 | 如何在 Python 中使用 SIFT 进行图像匹配

介绍 人类通过记忆和理解来识别物体、人和图像。你看到某件事的次数越多,你就越容易记住它。此外,每当一个图像在你的脑海中弹出时,它就会将该项目或图像与一堆相关的图像或事物联系起来。如果我告诉你我们可以使用一种称为 SIFT 算法的技术来教机器做同样的事情呢? 尽管…

C语言——动态内存函数(malloc、calloc、realloc、free)

了解动态内存函数 前言&#xff1a;一、malloc函数二、calloc函数三、realloc函数四、free函数 前言&#xff1a; 在C语言中&#xff0c;动态内存函数是块重要的知识点。以往&#xff0c;我们开辟空间都是固定得&#xff0c;数组编译结束后就不能继续给它开辟空间了&#xff0…

贴吧照片和酷狗音乐简单爬取

爬取的基本步骤 很简单&#xff0c;主要是两大步 向url发起请求 这里注意找准对应资源的url&#xff0c;如果对应资源不让程序代码访问&#xff0c;这里可以伪装成浏览器发起请求。 解析上一步返回的源代码&#xff0c;从中提取想要的资源 这里解析看具体情况&#xff0c;一…

浅谈现代医院手术室IT供配电系统的设计与研究

安科瑞 华楠 &#xff3b;摘要&#xff3d; 随着人们的生活水平的不断提高&#xff0c;医疗条件的不断改善&#xff0c;人们对健康越来越重视同时对医疗条件的要求也越来越高&#xff0c;对医院手术室医疗设施提出了新的要求。以往医院普通手术室状况已不能满足人们的要求&…

腾讯云CVM服务器端口在安全组中打开!

腾讯云服务器CVM端口怎么开通&#xff1f;腾讯云服务器端口是通过配置安全组规则来开通的&#xff0c;腾讯云服务器网以开通80端口为例来详细说下腾讯云轻量应用服务器开启端口的方法&#xff0c;其他的端口的开通如8080、1433、443、3306、8888等端口也适用于此方法&#xff0…

基于Yolov5与LabelMe训练自己数据的图像分割完整流程

基于Yolov5与LabelMe训练自己数据的实例分割完整流程 1. Yolov5配置2. 创建labelme虚拟环境4. 接下来开始使用labelme绘制分割数据集4.1 json to txt4.2 划分数据集(可分可不分) 5. 训练 1. Yolov5配置 参照这边文章&#xff1a; https://blog.csdn.net/ruotianxia/article/de…

okcc对接ASR平台,okcc客户投诉的安全问题

客户投诉: 客户为什么要投诉&#xff1f;实际上分为两种情况&#xff0c;一是客户被冒犯到不能容忍导致的投诉&#xff0c;二是恶意投诉。降低客户被冒犯投诉的概率&#xff0c;无非就是选择客户、规范用语、降低频度&#xff1b;减少恶意投诉&#xff0c;回避是实践证明最有效…

《C语言深度解剖》.pdf

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;深入理解C语言 &#x1f4a8;吾生也有涯&#xff0c;而知也无涯 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 C语言深度解剖.pdf 提取码:yunx

KCC@深圳开源读书会即将举办,来与行业大咖面对面交流

KCC&#xff0c;全称 KAIYUANSHE City Community&#xff08;中文&#xff1a;开源社城市社区&#xff09;是由开源社发起&#xff0c;旨在让开源社区在每个城市落地生根的地域性开源组织。 自2023年2月份发起以来&#xff0c;我们已经在南京、上海、深圳、北京、硅谷、新加坡、…

iTOP-3568开发板使用OpenCV处理图像-颜色转换

本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程 \04_OpenCV 开发配套资料\05”目录下&#xff0c;如下图所示&#xff1a; cv2.cvtColor()函数功能&#xff1a; 将一幅图像从一个色彩空间转换到另一个色彩空间。 函数原型&#xff1a; cv2.cvt…