SpringMVC中使用REST风格

了解REST

REST:即 Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。使用这种架构的应用即为RESTFUL。它结构清晰、符合标准、易于理解、扩展方便, 所以正得到越来越多网站的采用。

在HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE,

它们分别对应四种基本操作:

1、GET ====== 获 取资源

  2、POST ======新建资源

  3、PUT======= 更新资源

  4、DELETE==== 删除资源

我们可以通过rest风格占位符方式,利用@PathVariable注解将占位符的值赋给调用方法参数,实现结果:

/某路径/1 HTTP GET : 得到 id = 1 的 一条数据

/某路径/1 HTTP DELETE: 删除 id = 1的 一条数据

/某路径/1   HTTP PUT: 更新id = 1的 一条数据

/某路径 HTTP POST: 新增一条数据

实现步骤如下:

  1. 在web.xml中配置HiddenHttpMethodFilter过滤器

    <!-- 前端浏览器不支持提交put、delete请求,从而要使用隐藏字段_mothd来提交,hiddenHttpMethodFilte过虑器能过_mothd的值来转换成对应的请求类型提交给Springmvc控制器,从而 实现put、delete请求--><filter><filter-name>hiddenHttpMethodFilte</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class></filter><filter-mapping><filter-name>hiddenHttpMethodFilte</filter-name><url-pattern>/*</url-pattern></filter-mapping>

     
  2. 前端请求中需要加入隐藏字段_method

    <%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>index pag</title>
    </head>
    <body>
    <a href="${pageContext.request.contextPath}/testget">测试get请求</a><form action="${pageContext.request.contextPath}/testpost" method="post">
    id:<input type="text" name="id" value="1"/>
    <button type="submit" value="提交">post提交</button>
    </form><form action="${pageContext.request.contextPath}/testput" method="post">
    姓名:<input type="text" name="name" value="lish"/>
    <input type="hidden" name="_method" value="put">
    <button type="submit" value="提交">put提交</button>
    </form><form action="${pageContext.request.contextPath}/testdelete" method="post">
    年龄:<input type="text" name="age" value="30"/>
    <input type="hidden" name="_method" value="delete">
    <button type="submit" value="提交">delete提交</button>
    </form></body>
    </html>

     
  3. 在控制器中使用method限定方法,使用@PathVariable获取参数

    /**
    *Description:
    *author: ljd
    *@date 2024年9月12日 
    *@version 1.0 
    */
    package test.springmvc.demo.controller;import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;@Controller
    public class PutAndDelete {@RequestMapping("/index")public String index() {return "index";}@RequestMapping(value = "/testget", method = RequestMethod.GET)public String testGet() {System.out.println("get...........");return "redirect:/index";}@RequestMapping(value = "/testpost", method = RequestMethod.POST)public String testPost(int id) {System.out.println("post...........");System.out.println("id:" + id);return "redirect:/index";}@RequestMapping(value = "/testput", method = RequestMethod.PUT)public String testPut(String name) {System.out.println("put...........");System.out.println("name:" + name);return "redirect:/index";}@RequestMapping(value = "/testdelete", method = RequestMethod.DELETE)public String testDelete(Integer age) {System.out.println("delete...........");System.out.println("age:" + age);return "redirect:/index";}}
    

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

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

相关文章

【练习9】大数加法

链接&#xff1a;大数加法__牛客网 (nowcoder.com) 分析&#xff1a; 当作竖式计算 import java.util.*;public class Solution {public String solve (String s, String t) {StringBuffer ret new StringBuffer();//i是字符串s的最后一个字符的索引int i s.length() - 1;//j…

新能源汽车安全问题如何解决?细看“保护罩”连接器的守护使命

「当前市场上绝大部分电池的安全系数远远不够」。 在一场世界动力电池大会上&#xff0c;宁德时代的董事长曾毓群这样犀利直言。 从汽车开始向电动化转型升级那天起&#xff0c;动力电池的安全隐患就一直是个老生常谈的话题了。曾毓群的这句话&#xff0c;直接点明了行业的发展…

参数传了报错没传参数识别不到参数传丢

【记一次参数传值了但报错未传值的问题解决历程】 问题描述&#xff1a;同一个接口&#xff0c;用测试类调可以成功&#xff0c;用postman调用一直报错少参数&#xff0c;后又尝试了用idea自带的http调用&#xff0c;同样报错参数未传值。 如图&#xff0c;传值了报错未传值。…

Java并发:互斥锁,读写锁,Condition,StampedLock

3&#xff0c;Lock与Condition 3.1&#xff0c;互斥锁 3.1.1&#xff0c;可重入锁 锁的可重入性&#xff08;Reentrant Locking&#xff09;是指在同一个线程中&#xff0c;已经获取锁的线程可以再次获取该锁而不会导致死锁。这种特性允许线程在持有锁的情况下&#xff0c;可…

AI网盘搜索 1.2.6 智能文件搜索助手,一键搜索所有资源

对于经常需要处理大量文件的人来说&#xff0c;AI网盘检索简直是救星。它提供了智能对话式搜索功能&#xff0c;只需用自然语言描述就能找到需要的文件。此外&#xff0c;它还广泛支持各种文件类型&#xff0c;从文档到图片&#xff0c;全面覆盖。精准定位功能让您能够快速找到…

DSC+主备+异步备库搭建

DSC主备异步备库搭建 本次在DSC的基础上进行主备集群异步备库的搭建&#xff0c;实现DSC主备异步备库的集合。 这里DMDSC集群是看做一个数据库服务&#xff08;即DSC集群内的都叫主库&#xff09;&#xff0c;备库是一个单机实例 环境配置 服务器配置 端口配置 实例名PORT…

C#获取计算机信息

目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Management; n…

Vulnhub:bassamCTF

靶机下载地址 信息收集 主机发现 扫描攻击机同网段存活主机。 nmap 192.168.31.0/24 -Pn -T4 靶机ip&#xff1a;192.168.31.165 端口扫描 nmap 192.168.31.165 -A -p- -T4 开放端口22&#xff0c;80。 网站信息收集 访问80端口的http服务。首页是空白页面&#xff0c;…

关于打不开SOAMANAGER如何解决

参考文章&#xff1a;https://blog.csdn.net/yannickdann/article/details/115396035 打开SE93

15_分布式数据结构

菜鸟&#xff1a; 老鸟&#xff0c;我最近在处理大量数据的时候遇到了瓶颈&#xff0c;单台服务器的内存和计算能力都不够用了。你知道有什么方法可以解决这个问题吗&#xff1f; 老鸟&#xff1a; 嗯&#xff0c;这种情况很常见。你可以考虑使用分布式数据结构。听说过吗&a…

ARM base instruction -- blr

BLR Branch with Link to Register calls a subroutine at an address in a register, setting register X30 to PC4. 带寄存器链接的分支在寄存器中的某个地址调用一个子程序&#xff0c;将寄存器 X30 (lr) 设置为 PC4。 BLR <Xn> BLR 跳转到reg内容地址&#xff0c;…

Django创建模型

1、根据创建好应用模块 python manage.py startapp tests 2、在models文件里创建模型 from django.db import modelsfrom book.models import User# Create your models here. class Tests(models.Model):STATUS_CHOICES ((0, 启用),(1, 停用),# 更多状态...)add_time mode…

大模型训练数据库Common Crawl

Common Crawl介绍 ‌‌Common Crawl是一个非营利组织&#xff0c;致力于通过大规模分布式爬虫系统定期抓取整个Web并将其存储在一个可公开访问的数据库中。Common Crawl的数据收集和处理过程包括使用Python开源爬虫工具收集全球范围内的网站数据&#xff0c;并将其上传到‌Com…

人工智能(AI)领域各方向顶会和顶刊

在人工智能&#xff08;AI&#xff09;这个快速发展的领域&#xff0c;研究人员和从业者需要紧跟最新的研究动态和技术进展。顶级的会议和期刊是获取最新科研成果和交流思想的重要平台。以下是人工智能领域内不同方向的顶级会议和期刊概览。 顶级会议 人工智能基础与综合 A…

基于Python的自然语言处理系列(5):窗口分类器用于命名实体识别(NER)

在本系列的第五篇文章中&#xff0c;我们将探讨如何使用窗口分类器进行命名实体识别&#xff08;NER&#xff09;。NER是信息提取中的关键任务&#xff0c;旨在从文本中识别出特定类型的实体&#xff0c;如人名、地名、组织名等。我们将介绍窗口分类器的原理&#xff0c;并展示…

vm虚拟机中ubuntu连不上网络,网络图标消失解决办法

之前做实验调了下机子的网络配置&#xff0c;后面实验做完发现连不上网了&#xff0c;这个问题折磨了我一个多小时&#xff0c;最后终于解决了&#xff0c;记录下解决过程 1. 重启网络服务 有时候简单地重启网络服务就能解决问题&#xff08;我未能解决&#xff0c;可能和碰过…

Spring自定义注解

目录 一、interface 关键字 二、元注解 三、简单实现 四、使用切面执行自定义注解逻辑 1) 首先将刚才的注解修改成放在方法上的&#xff1a; 2) 定义一个切面类&#xff1a; 3&#xff09;将注解放入到接口方法中测试&#xff1a; 五、切点表达式 一、interface 关键字 …

ROADM(可重构光分插复用器)-介绍

1. 引用 https://zhuanlan.zhihu.com/p/163369296 https://zhuanlan.zhihu.com/p/521352954 https://zhuanlan.zhihu.com/p/91103069 https://zhuanlan.zhihu.com/p/50610236 术语&#xff1a; 英文缩写描述灰光模块彩光模块CWDM&#xff1a;Coarse Wave-Length Division …

嵌入式学习--linux系统提供的显示接口”framebuffer“

1.利用framebuffer绘制图像 宏定义 1.#define RGB888_FMT 32 2.#define RGB565_FMT 16 3.#include"utf.h" 函数接口主体 void draw_bmp(int x, int y, char *picname, int w, int h) {int fd open(picname, O_RDONLY);if (-1 fd){perror("fail open bmp&quo…

IT前端好用的工具集

在线抠图网站 https://www.remove.bg/ 将iconfont转成css显示 https://transfonter.org/ 免费的在线图片压缩 https://tinypng.com/ JSON在线格式化工具 https://www.sojson.com/ 国内人工智能kimi.moonshot工具 https://kimi.moonshot.cn/chat/crft7a6sdv14grouufs0 自动…