@RequestMapping 注解以及其它使用方式

2023-08-16 18:46:43

😀前言
本篇主要讲解@RequestMapping 注解以及其它使用方式

🏠个人主页:尘觉主页
在这里插入图片描述

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

在csdn获奖荣誉: 🏆csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🤗 端午大礼包获得者

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

🥰 @RequestMapping 注解以及其它使用方式

@RequestMapping 可以修饰方法和类

说明:

@RequestMapping 注解可以修饰方法,还可以修饰类 当同时修饰类和方法时,

请求的 url 就是组合 /类请求值/方法请求值

注意

  1. method=RequestMethod.POST: 表示请求buy目标方法必须是 post

  2. RequestMethod 四个常用选项 POST, GET, PUT, DELETE[后面我们会详解]

  3. SpringMVC 控制器默认支持GET和POST两种方式

  4. buy()方法请求的url: http://ip:port/工程路径/user/buy

  5. @PostMapping(value = “/buy”)

等价 @RequestMapping(value = “/buy”,method = RequestMethod.POST)

代码演示

创建Texe,java

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器,注入到容器
public class UserHandler {

    
    //@RequestMapping(value = "/buy",method = RequestMethod.POST)
    @PostMapping(value = "/buy")
    public String buy() {
        System.out.println("购买商品~");
        return "success";
    }

创建request.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>购买商品</title>
</head>
<body>
<h1>购买商品</h1>
<%--老师解读
1. action="user/buy" 对应 url http://localhost:8080/工程路径/user/buy
--%>
<form action="user/buy" method="post">
    购买人:<input type="text" name="username"><br>
    够买量:<input type="text" name="nums"><br>
    <input type="submit" value="购买">
</form>

创建success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>操作成功</title>
</head>
<body>
<h1>恭喜, 操作成功~</h1>
</body>
</html>

完成测试(页面方式)

img

页面方式完成测试-- Postman

img

🤩@RequestMapping 可以指定请求方式

  1. 说明: @RequestMapping 还可以指定请求的方式(post/get/put/delete…), 请求的方式需
    要和指定的一样,否则报错

  2. SpringMVC 控制器默认支持GET和POST两种方式, 也就是你不指定 method , 可以接收GET 和 POST 请求

注意

  1. @GetMapping(value = “/find”)

等价 @RequestMapping(value = “/find”,method = RequestMethod.GET)

应用实例

    @RequestMapping(value = "/find", method = RequestMethod.GET)
    public String search(String bookId) {
        System.out.println("查询书籍 bookId= " + bookId);
        return "success";
    }
  1. 当明确指定了 method , 则需要按指定方式请求, 否则会报错,比如

img

😋@RequestMapping 可指定 params 和 headers 支持简单表达式

  1. param1: 表示请求必须包含名为 param1 的请求参数

  2. !=param1: 表示请求不能包含名为 param1 的请求参数

  3. param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1

  4. {“param1=value1”, “param2”}: 请求必须包含名为 param1 和 param2 的两个请求参数,且 param1 参数的值必须为value1

列如

  1. params=“bookId” 表示请求该目标方法时,必须给一个bookId参数, 值没有限定

  2. search(String bookId): 表示请求目标方法时, 携带的bookId=100, 就会将请求携带的 bookId对应的值 100, 赋给 String bookId

  3. params = “bookId=100” 表示必须给一个bookId参数, 而且值必须是100

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器,注入到容器
    public class UserHandler { 
    @RequestMapping(value = "/find", params = "bookId=100", method = RequestMethod.GET)
        public String search(String bookId) {
            System.out.println("查询书籍 bookId= " + bookId);
            return "success";
    }
}

修改 request.jsp , 增加代码

<hr><h1>演示params的使用</h1>
<a href="user/find?bookId=100">查询书籍</a>

页面方式完成测试-- Postman

img

小的细节说明和测试

1) 需要有 bookId 参数,并且值为 100, 否则报错

@RequestMapping(value = “/find”, params = “bookId=100”, method == RequestMethod.GET)

img

2) 需要有 bookId 参数,并且值不为100否则报错

@RequestMapping(value = “/find”, params = “bookId!=100”, method = RequestMethod.GET

img

🤔@RequestMapping 支持 Ant 风格资源地址

  1. ?:匹配文件名中的一个字符

  2. *:匹配文件名中的任意字符

  3. **:匹配多层路径

  4. Ant 风格的 url 地址举例

  5. /user/*/createUser: 匹配 /user/aaa/createUser、/user/bbb/createUser 等 URL

  6. /user/**/createUser: 匹配 /user/createUser、/user/aaa/bbb/createUser 等 URL

  7. /user/createUser??: 匹配 /user/createUseraa、/user/createUserbb 等 URL

应用实例

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器,注入到容器
public class UserHandler {
   
 @RequestMapping(value = "/message/**")
        public String im() {
            System.out.println("发送消息");
            return "success";
    }
}

添加request.jsp代码

<hr><h1>演示Ant风格的请求资源方式 </h1>
<a href="user/message/aa">发送消息1</a><br>
<a href="user/message/aa/bb/cc">发送消息2</a><br>

Postman 完成测试

img

🧐@RequestMapping 还可以配合 @PathVariable 映射 URL 绑定的占位符。

这样就不需要在 url 地址上带参数名了,更加的简洁明了

比如: 我们的前端页面是 这样的, kristina 和 300 是参数值

< h 1>占位符的演示</h 1>

占位符的演示</ a>

要求:

我们希望目标方法获取到 username 和 userid, value=“/xx/{username}” -

@PathVariable(“username”)…

前端页面代码: 占位符的演示</ a>

(value = “/reg/{username}/{userid}”): 表示kristina->{username} 300=>{userid}

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器,注入到容器
public class UserHandler {
    @RequestMapping(value = "/reg/{username}/{userid}")
    public String register(@PathVariable("username") String name,
                           @PathVariable("userid") String id) {
        System.out.println("接收到参数--" + "username= " + name + "--" + "usreid= " + id);
        return "success";
    }
}

Postman 完成测试

img

注意事项和使用细节

映射的 URL, 不能重复

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器,注入到容器
public class UserHandler {   
    @RequestMapping(value = "/hi")
    public String hi() {
        System.out.println("hi");
        return "success";
    }

    @RequestMapping(value = "/hi")
    public String hi2() {
       System.out.println("hi");
       return "success";
    }
}

服务端报错信息:to { [/user/hi]}: There is already ‘userHandler’ bean metho

各种请求的简写形式

说明

@RequestMapping(value = “/buy”,method = RequestMethod.POST) 等 价

@PostMapping(value = “/buy”)

简写方式一览: @GetMapping @PostMapping @PutMapping @DeleteMapping

这个在上面的代码中也提到过 和有具体的列子 这里只是具体说一下

🧡综合代码示例

编写一个表单, 以 Post 提交 Computer 信息, 后端编写 ComputerHandler, 可以接收到信息

img

jsp代码

<h1>电脑信息</h1>

<form action="computer/info" method="post">
    品牌:<input type="text" name="brand"><br>
    价格:<input type="text" name="price"><br>
    数量:<input type="text" name="nums"><br>
    <input type="submit" value="提交">
</form>

后端代码

注意info方法的形参名需要和请求的参数名一致

@RequestMapping("/computer")
@Controller
public class ComputerHandler {

    //这里一定要注意,info方法的形参名需要和请求的参数名一致
    @PostMapping("/info")
    public String info(String brand, String price, String nums) {
        System.out.println("电脑信息 brand=" + brand
                + " price=" + price + " nums=" + nums);

        return "success";
    }
}

😄总结

@RequestMapping 还可以指定请求的方式(post/get/put/delete…), 请求的方式需
要和指定的一样,否则报错

  1. ?:匹配文件名中的一个字符

  2. *:匹配文件名中的任意字符

  3. **:匹配多层路径

  4. Ant 风格的 url 地址举例

  5. /user/*/createUser: 匹配 /user/aaa/createUser、/user/bbb/createUser 等 URL

  6. /user/**/createUser: 匹配 /user/createUser、/user/aaa/bbb/createUser 等 URL

  7. /user/createUser??: 匹配 /user/createUseraa、/user/createUserbb 等 URL

😁热门专栏推荐

想学习vue的可以看看这个
java基础合集
数据库合集
redis合集
nginx合集
linux合集
等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

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

更多推荐

Stable Diffusion如何生成高质量的图-prompt写法介绍

文章目录StableDiffusion使用尝试下效果prompt的编写技巧prompt和negativepromptPrompt格式Prompt规则细节优化GuidanceScale总结StableDiffusionStableDiffusion是一个开源的图像生成AI系统,由Anthropic公司开发。它基于Tran

【实战】 七、Hook,路由,与 URL 状态管理(下) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十三)

文章目录一、项目起航:项目初始化与配置二、React与Hook应用:实现项目列表三、TS应用:JS神助攻-强类型四、JWT、用户认证与异步请求五、CSS其实很简单-用CSS-in-JS添加样式六、用户体验优化-加载中和错误状态处理七、Hook,路由,与URL状态管理1+2.3~67.完成URL状态管理与JS中的iter

GO学习之切片操作

GO系列1、GO学习之HelloWorld2、GO学习之入门语法3、GO学习之切片操作4、GO学习之Map操作5、GO学习之结构体操作6、GO学习之通道(Channel)7、GO学习之多线程(goroutine)8、GO学习之函数(Function)9、GO学习之接口(Interface)10、GO学习之网络通信(Ne

RL — 强化学习算法概述

一、说明在本系列中,我们检查了许多强化学习(RL)算法,例如,MoJoCo任务的策略梯度方法,Atari游戏的DQN和机器人控制的基于模型的RL。虽然许多算法都是针对特定领域引入的,但这种联系只能是遗留的。在本文中,我们将概述这些算法,并讨论它们在选择使用什么方法时的一般权衡。二、无模型算法RL算法可分为基于模型的算法

飞书ChatGPT机器人 – 打造智能问答助手实现无障碍交流

文章目录前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10.机器人测试前言在飞书中创建chatGPT机器人并且对话,在下面操作步骤中,使用

静态代码分析基础知识及分析工具

安全之安全(security²)博客目录导读ATF(TF-A)/OPTEE之静态代码分析汇总目录一、静态代码分析介绍二、静态代码分析工具三、Sonarlint静态代码分析工具介绍1.定义2.特性3.SonarQube的官方文档一、静态代码分析介绍根据维基百科,静态代码检查又称为静态程序分析,是指在不运行计算机程序的条件

WAIC2023:图像内容安全黑科技助力可信AI发展

目录0写在前面1AI图像篡改检测2生成式图像鉴别2.1主干特征提取通道2.2注意力模块2.3纹理增强模块3OCR对抗攻击4助力可信AI向善发展总结0写在前面2023世界人工智能大会(WAIC)已圆满结束,恰逢全球大模型和生成式人工智能蓬勃兴起之时,今年参会的人们更加关注AIGC技术在未来可以如何作用于人们的生活。自AI

公网访问的Linux CentOS本地Web站点搭建指南

文章目录前言1.本地搭建web站点2.测试局域网访问3.公开本地web网站3.1安装cpolar内网穿透3.2创建http隧道,指向本地80端口3.3配置后台服务4.配置固定二级子域名5.测试使用固定二级子域名访问本地web站点前言在web项目中,部署的web站点需要被外部访问,则需要一个媒介,通过把资源放在这个媒介中

PSO粒子群优化算法

PSO粒子群优化算法算法思想matlab代码python代码算法思想粒子群算法(ParticleSwarmOptimization)优点:1)原理比较简单,实现容易,参数少。缺点:1)易早熟收敛至局部最优、迭代后期收敛速度慢的。算法拓展针对标准PSO的缺点,通常有如下的改进:实现参数的自适应变化。引入一些其他机制。比如

Mysql和ES、Redis数据同步方案汇总

文章目录前言一、数据同步方案1.同步双写2.异步双写([MQ](https://so.csdn.net/so/search?q=MQ&spm=1001.2101.3001.7020)方式)3.基于Mysql表定时扫描同步4.基于[Binlog](https://so.csdn.net/so/search?q=Binlo

AIGC数据处理与存储解决方案

针对在AIGC的场景下,如何解决在AIGC训练过程中数据的存储和数据处理的问题,杨冠军从三个方面进行介绍与解读:一是AIGC对存储提的新需求;二是介绍腾讯云可以给用户提供的整体存储解决方案;三是腾讯云提供的整体数据处理方案。AIGC的新需求:模型训练与应用推理的述求我国每年产生的数据量呈现非常大的增长趋势,这个前提还是

热文推荐