@RequestParam @PathVariable
1、Request参数
在访问各种各样网站时,经常会发现网站的URL的最后一部分形如:?xxxx=yyyy&zzzz=wwww。这就是HTTP协议中的Request参数,它有什么用呢?先来看一个例子:
- 在知乎中搜索web
- 浏览器跳转到新页面后,URL变为https://www.zhihu.com/search?type=content&q=web
这里type=content&q=web就是搜索请求的参数,不同参数之间用&分隔,每个参数形如name=value形式,分别表示参数名字和参数值。在这个例子中,我们输入不同的搜索关键词,在搜索结果页面的URL的q参数是不同的,也就是说,HTTP参数实际上可以认为是一种用户的输入,根据不同的用户输入,服务器经过处理后返回不同的输出(例如搜索spring和搜索java,显示结果是不一样的。)
2、Spring MVC中的Request参数
在SpringMVC框架中,现在我们已经可以通过定义@RequestMapping来处理URL请求了,和@PathVariable一样,我们也需要再处理URL的函数中获取URL中的参数-也就是?key=value1&key2=value2这样的参数列表。通过注解@RequestParam可以轻松的将URL中的参数绑定到处理函数方法的变量中:
@RequestMapping("/user") @ResponseBody public String getUserBlog(@RequestParam("id") int blogId) {return "blogId = " + blogId; }
这样当我们访问/user/?id=123时,Spring MVC帮助我们将Request参数id的值绑定到了处理函数的参数blogId上。这样就能够轻松获取用户输入,并根据它的值进行计算并返回了。
运行结果:
3、@RequestParam vs @PathVariable
相信大家可能注意到了,@RequestParam和@PathVariable都能够完成类似的功能——因为本质上,它们都是用户的输入,只不过输入的部分不同,一个在URL路径部分,另一个在参数部分。要访问一篇博客文章,这两种URL设计都是可以的:
- 通过@PathVariable,例如/blogs/1
- 通过@RequestParam,例如blogs?blogId=1
那么究竟应该选择哪一种呢?建议:
- 当URL指向的是某一具体业务资源(或者资源列表),例如博客,用户时,使用@PathVariable
- 当URL需要对资源或者资源列表进行过滤,筛选时,用@RequestParam
例如我们会这样设计URL:
- /blogs/{blogId}
- /blogs?state=publish而不是/blogs/state/publish来表示处于发布状态的博客文章
4、更多用法
一旦我们在方法中定义了@RequestParam变量,如果访问的URL中不带有相应的参数,就会抛出异常——这是显然的,Spring尝试帮我们进行绑定,然而没有成功。但有的时候,参数确实不一定永远都存在,这是我们可以通过定义required属性:
@RequestParam(name="id",required=false)
当然,在参数不存在的情况下,可能希望变量有一个默认值:
@RequestParam(name="id",required=false,defaultValue="0")
转载地址:https://www.cnblogs.com/fangpengchengbupter/p/7826565.html
转载于:https://www.cnblogs.com/niceyoo/p/10073361.html
@RequestParam @PathVariable相关推荐
- 2020大部分知名公司Java面试题答案(一)
个人资源与分享网站:http://xiaocaoshare.com/ 1.&不管前面条件的是否正确,后面的都会执行 && 只有当前面条件正确的时候后面才会执行,效率更好 2 ...
- Spring Validation最佳实践及其实现原理,参数校验没那么简单!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:六点半起床 juejin.im/post/685654110 ...
- springmvc使用和经验总结(长沙师说网络科技有限公司)
springmvc 先分析下代码,高速学习.先要把配置文件写好, 给上2个类详细看看 package com.shishuo.studio.action;import org.apache.log4j ...
- spring-mvc注解
关键注解 springmvc的关键注解主要有@Controller/@RequestMapping/@RequestParam/@PathVariable/@RequestHeader/@Cookie ...
- Spring4MVC 请求参数映射和Content-type
目录 前言 不使用注解(不传则为null) 基本数据类型和日期类型 自定义类型POJO @PathVariable注解 @RequestParam 注解 @RequestBody注解 复杂对象Arra ...
- Spring常见注解
1.@SpringBootApplication 这里先单独拎出 @SpringBootApplication 注解说一下,虽然我们一般不会主动去使用它. 这个注解是 Spring Boot 项目的基 ...
- Spring Validation 最佳实践及其实现原理,参数校验没那么简单!
之前也写过一篇关于Spring Validation使用的文章,不过自我感觉还是浮于表面,本次打算彻底搞懂Spring Validation.本文会详细介绍Spring Validation各种场景下 ...
- Spring Boot——LocalDateTime格式化配置
在项目中日期格式化是最常见的问题,之前涉及的 java.util.Date 和 java.util.Calendar 类易用性差,不支持时区,非线程安全,对日期的计算方式繁琐,而且容易出错,因为月份是 ...
- Java注解配置rest服务_Spring Boot 注解—常用注解
注:该部分内容包含一些常用注解,如果没有学习过java注解的同学可以先看一下上一小节的内容Spring Boot 注解-基本知识 ,不看也没关系,下面就开始本节内容. @Configuration注解 ...
最新文章
- 常用的shell脚本案例(14.04.15更新)
- Xcode8 注释快捷键无效, 解决方案
- STL源码剖析学习七:stack和queue
- mybati内sql查询语句在两个日期内
- OO实现ALV TABLE 二:ALV显示的三种形式
- Linux登陆Mariadb数据库,Mariadb数据库的远程连接(centos 7+ Navicat)
- 6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化
- Mysql 死锁过程及案例详解之记录锁与间隔锁Record Lock Gap Lock
- 蓝卡在哪里_什么是蓝卡,魅力在哪里,让申请者为之着迷?
- 用delphi 做服务器,basic4android 实现三层数据交互
- totolink 异地组网
- 【渝粤教育】国家开放大学2018年春季 7140-22T危急重症护理学(本) 参考试题
- ov5640帧率配置_逃离塔科夫怎么提升帧率 帧率优化建议_单机游戏_游戏攻略
- 派单o2o全开源版 v11.6.0 全新UI版小程序模块
- H5的本地保存localStorage、sessionStorage用法总结
- Mybatis-语法笔记
- 1219v网卡驱动+linux,黑苹果Intel板载网卡驱动-IntelMausiEthernet.kext下载 V2.5.0d0-PC6苹果网...
- 代码评审这点事,元芳你怎么看
- payjs插件php,基于payjs的discuz支付插件制作
- Deep Retinex Decomposition for Low-Light Enhancement 论文阅读笔记
热门文章
- thinkphp5的目录结构和命名规范
- 解决在使用numpy.polyfit 时出现的 raise LinAlgError(“SVD did not converge in Linear Least Squares“)错误
- Typora入门(1)
- TP、TN、FP、FN
- .NET多线程编程入门
- CF908G New Year and Original Order
- 一句话懂什么是JS闭包
- Luogu5369 [PKUSC2018]最大前缀和
- Hibernate-day04
- javascript学习笔记2