SpringMVC -->ant风格的路径 -->占位符 -->获取请求参数 -->@RequestParam

news2024/10/6 16:28:18

文章目录

  • SpringMVC支持ant风格的路径
  • SpringMVC支持路径中的占位符
  • SpringMVC获取请求参数
    • 通过servletAPI获取
    • 通过控制器方法的形参获取请求参数
  • @RequestParam注解处理请求参数和控制器方法的形参的映射关系
    • 代码样例


SpringMVC支持ant风格的路径

?:表示任意的单个字符

@RequestMapping("/a?a/testAnt")
public String testAnt(){
    return "success";
}

在这里插入图片描述
运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

*:表示任意的0个或多个字符

@RequestMapping("/a*a/testAnt")
public String testAnt(){
    return "success";
}

在这里插入图片描述
运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

**:表示任意的一层或多层目录

注意:在使用**时,只能使用/**/xxx的方式

@RequestMapping("/a**a/testAnt")
public String testAnt(){
    return "success";
}

在这里插入图片描述
运行结果:
在这里插入图片描述
在这里插入图片描述
?为什么会报错
原因是因为我们在使用**时在这里插入图片描述
前后是不能有别的字符的,否则会当成单独的*来解析
在这里插入图片描述
在这里插入图片描述


SpringMVC支持路径中的占位符

原始方式:/deleteUser?id=1
rest方式:/deleteUser/1
SpringMVC路径中的占位符常用于restful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符{xxx}表示传输的数据,在通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参
在这里插入图片描述

	@RequestMapping("/testPath/{id}")
    public String testPath(@PathVariable("id")Integer id){
        System.out.println("id="+id);
        return "success";
    }

SpringMVC获取请求参数

通过servletAPI获取

将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文对象

@RequestMapping("testServletAPI")
    //形参位置的request表示当前请求
    public String testServletAPI(HttpServletRequest request){
        String username = request.getParameter("username");
		String password = request.getParameter("password");
		System.out.println("username:"+username+",password:"+password);
		return "success";
}

通过控制器方法的形参获取请求参数

在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在DispatcherServlet就会将请求参数赋值给相应的形参

<form th:action="@{/testParam}" method="get">
  用户名:<input type="text" name="username"><br>
  密码:<input type="text" name="password"><br>
  爱好:<input type="checkbox" name="hobby" value="a">
  <input type="checkbox" name="hobby" value="b">
  <input type="checkbox" name="hobby" value="c">
  <input type="submit" value="测试使用控制器形参获取请求参数">
</form>
	@RequestMapping("/testParam")
    public String testParam(String username,String password,String[] hobby){
        //求参数中出现多个同名的请求参数,可以再控制器方法的形参位置设置字符串类型或字符串数组接收此请求参数
        //若使用字符串类型的形参,最终结果为请求参数的每一个值之间使用逗号进行拼接
        System.out.println("username:"+username+",password:"+password+",hobby:"+ Arrays.toString(hobby));
        return "success";
    }

@RequestParam注解处理请求参数和控制器方法的形参的映射关系

@RequestParam是将请求参数和控制器方法的形参创建映射关系
@RequestParam注解一共有三个属性:
value:指定为形参赋值的请求参数的参数名
required:设置是否必须传输此请求参数,默认值为true
若设置为true时,则当前请求必须传输value所指定的请求参数,若没有传输该请求参数,且没有设置defaultValue属性,则页面报错400:Required String parameter ‘xxx’ is not present;若设置为false,则当前请求不是必须传输value所指定的请求参数,若没有传输,则注解所标识的形参的值为null
defaultValue:不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为“”时,则使用默认值为形参赋值

代码样例

控制器代码:

 @RequestMapping("/testParam")
    public String testParam(
            @RequestParam(value = "user_name",required = false,defaultValue = "hehe") String username,
            String password,
            String[] hobby){
        //求参数中出现多个同名的请求参数,可以再控制器方法的形参位置设置字符串类型或字符串数组接收此请求参数
        //若使用字符串类型的形参,最终结果为请求参数的每一个值之间使用逗号进行拼接
        System.out.println("username:"+username+",password:"+password+",hobby:"+ Arrays.toString(hobby));
        return "success";
    }

前端代码:

<form th:action="@{/testParam}" method="get">
    用户名:<input type="text" name="user_name"><br>
    密码:<input type="text" name="password"><br>
    爱好:<input type="checkbox" name="hobby" value="a">
    <input type="checkbox" name="hobby" value="b">
    <input type="checkbox" name="hobby" value="c">
    <input type="submit" value="测试使用控制器形参获取请求参数">
</form>

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

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

相关文章

爆火微信公众号自定义早安推送,爱她就给她推送

为女朋友打造专属早安推送先上截图电脑端看的效果手机端看的效果一、申请微信公众号测试号二、让他/她扫码关注测试公众号三、新增模板消息四、天气API五、使用 leancloud 部署云函数六、源代码先上截图 电脑端看的效果 手机端看的效果 一、申请微信公众号测试号 https://mp.w…

Kettle(7):插入/更新组件

1 组件介绍 插入/更新组件能够将Kettle抽取的数据&#xff0c;与某个表的数据进行对比&#xff0c;如果数据存在就更新&#xff0c;不存在就插入。 2 需求 修改 t_user中的张三这一行数据&#xff0c;修改age为80 同时&#xff0c;我们想要使用Kettle将 t_user1 中的张三这一…

【编程入门】N种编程语言做个记事本

背景 前面已输出多个系列&#xff1a; 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 本系列对比云笔记&#xff0c;将更为简化&#xff0c;去掉了网络调用&#xff0…

量化选股——基于多因子模型的量化策略(第1部分—因子测算策略构建)

文章目录1.多因子模型概述2.因子挖掘3.多因子策略4.多因子策略构建基于多因子的策略通用流程Fama-French三因子因子效果测算方法因子测算结论&量化策略构建东西有点多&#xff0c;拆开成多个文章&#xff0c;边写边整合~&#xff0c;应该会分成2部分&#xff1a; 第1部分—…

【每日一道智力题】之坤坤猜生日(面试高频)

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;每日一题 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最…

文本特征工程——下篇

文本特征下篇 针对梯度提升树模型对文本特征进行特征工程&#xff0c;我们需要充分挖掘LabelLabelLabel编码丢失信息&#xff0c;例如上面的名字特征。内部存在非常强的规律&#xff0c;Mr等信息。这些信息反映了性别相关的信息。如果直接进行Label编码就会丢失此类信息&#…

高通平台开发系列讲解(GPS篇)NMEA数据包解析

文章目录 一、通用NMEA语句类型二、 NMEA语句格式2.1、GSV语句2.2、RMC语句2.3、GSA语句2.4、VTG语句2.5、DTM语句2.6、GNS语句2.7、GGA语句2.8、GLL语句2.9、GST语句2.10、ZDA语句沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 NMEA-0183是美国国家海洋电子协会为海…

【读论文】Going deeper in spiking neural networks Vgg and residual architecture

frontiers in Neuroscience 2019 摘要 本文提出一种新的方法来构建深度SNN&#xff0c;并在复杂视觉识别问题上证明其有效性&#xff08;如CIFAR10和ImageNet&#xff09;&#xff1b;该方法应用于VGG和残差网络结构&#xff0c;并获得最优精度&#xff1b;最后给出稀疏事件驱…

力扣刷题| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

文章标题LeetCode 20. 有效的括号题目链接&#x1f517;思路代码实现LeetCode 1047. 删除字符串中的所有相邻重复项题目链接&#x1f517;思路代码实现LeetCode 150. 逆波兰表达式求值题目链接&#x1f517;思路代码实现LeetCode 20. 有效的括号 题目链接&#x1f517; LeetC…

运动基元(一):Dubin‘s曲线【part2】

三、六种Dubin’s轨迹的实现——开始摆盘啦 3.1 LSL LSL的第一段圆弧的曲率 k 1 = k m a x > 0 → s i g n ( k 1 ) = 1 k_1=k_{max}>0\rightarrow

118、【回溯算法】leetcode ——40. 组合总和 II:回溯法+剪枝优化(C++版本)

题目描述 原题链接&#xff1a;40. 组合总和 II 解题思路 本题的特点是&#xff0c;一个允许结果中出现相同数字&#xff0c;但每个元素仅能被选取一次。结果与结果之间不允许有重复&#xff0c;需要去重。 与 77. 组合&#xff08;回溯法剪枝优化&#xff09; 的相同之处在于…

【JavaSE专栏9】Java 注释知多少

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

斐波那契数列的--------5种算法(又称“兔子数列”)

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样一个数列&#xff1a;…

决策树-剪枝处理

前言&#xff1a;理解《机器学习》P79-83中的决策树剪枝示例。 决策树生成 原始数据集如下所示&#xff0c;前10行为训练集&#xff0c;后7行为验证集&#xff0c;由此数据集可生成如下所示的决策树。 下面解释未进行剪枝操作的决策树为何如上图所示。 不对解释每个结点和分支…

WPF-3D图形

WPF-3D图形 WPF的3D功能可以在不编写任何c#代码的情况下进行绘制&#xff0c;只需要使用xaml即可完成3D图形的渲染。本文主要讲述了WPF-3D中的关键概念&#xff0c; 以及常用到的命中测试、2d控件如何在3D对象中进行渲染&#xff0c;除此之外&#xff0c;还演示了如何导入外部…

InstanceNorm LayerNorm

InstanceNorm && LayerNorm author: SUFEHeisenberg date: 2023/01/26 先说结论: 将Transformer类比于RNN&#xff1a;一个token就是一层layer&#xff0c;对一整句不如token有意义原生Bert代码或huggingface中用的都是InstanceNorm instead of LayerNorm&#xff…

【AAAI2023】Head-Free Lightweight Semantic Segmentation with Linear Transformer

论文&#xff1a;【AAAI2023】Head-Free Lightweight Semantic Segmentation with Linear Transformer 代码&#xff1a;https://github.com/dongbo811/AFFormer 这是来自阿里巴巴的工作&#xff0c;作者构建了一个轻量级的Transformer网络用于语义分割&#xff0c;主要有两点…

发现下属的学历造假,但是他的工作能力又很强,该开除他吗?

在职场上混&#xff0c;学历是敲门砖还是定音锤呢&#xff1f;一位网友问&#xff1a;发现下属的学历造假&#xff0c;但是他的工作能力又很强&#xff0c;该开除他吗?有人觉得一定要开除&#xff0c;这就是钻空子&#xff0c;受影响最大的人不是他&#xff0c;而是那些真才实…

上采样与下采样

数据分析中的上采样和下采样 背景&#xff1a; 在分类问题中&#xff0c;由于各种原因&#xff0c;我们所获取到的数据集很容易出现正负样本的不平衡&#xff0c;或者某些数据特别多&#xff0c;有些数据则特别少&#xff0c;在这样的数据集中&#xff0c;进行训练&#xff0c…

OpenCV直方图Java 演示程序

直方图Java 演示程序以下文件编码为utf-8 为佳。代码文件名&#xff1a;OpenCvMain.javapackage org.opencv;import java.net.URL;import java.util.LinkedList;import java.util.List;import org.opencv.core.Core;import org.opencv.core.CvType;import org.opencv.core.Mat;…