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

那么究竟应该选择哪一种呢?建议:

  1. 当URL指向的是某一具体业务资源(或者资源列表),例如博客,用户时,使用@PathVariable
  2. 当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相关推荐

  1. 2020大部分知名公司Java面试题答案(一)

    个人资源与分享网站:http://xiaocaoshare.com/ 1.&不管前面条件的是否正确,后面的都会执行   && 只有当前面条件正确的时候后面才会执行,效率更好 2 ...

  2. Spring Validation最佳实践及其实现原理,参数校验没那么简单!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:六点半起床 juejin.im/post/685654110 ...

  3. springmvc使用和经验总结(长沙师说网络科技有限公司)

    springmvc 先分析下代码,高速学习.先要把配置文件写好, 给上2个类详细看看 package com.shishuo.studio.action;import org.apache.log4j ...

  4. spring-mvc注解

    关键注解 springmvc的关键注解主要有@Controller/@RequestMapping/@RequestParam/@PathVariable/@RequestHeader/@Cookie ...

  5. Spring4MVC 请求参数映射和Content-type

    目录 前言 不使用注解(不传则为null) 基本数据类型和日期类型 自定义类型POJO @PathVariable注解 @RequestParam 注解 @RequestBody注解 复杂对象Arra ...

  6. Spring常见注解

    1.@SpringBootApplication 这里先单独拎出 @SpringBootApplication 注解说一下,虽然我们一般不会主动去使用它. 这个注解是 Spring Boot 项目的基 ...

  7. Spring Validation 最佳实践及其实现原理,参数校验没那么简单!

    之前也写过一篇关于Spring Validation使用的文章,不过自我感觉还是浮于表面,本次打算彻底搞懂Spring Validation.本文会详细介绍Spring Validation各种场景下 ...

  8. Spring Boot——LocalDateTime格式化配置

    在项目中日期格式化是最常见的问题,之前涉及的 java.util.Date 和 java.util.Calendar 类易用性差,不支持时区,非线程安全,对日期的计算方式繁琐,而且容易出错,因为月份是 ...

  9. Java注解配置rest服务_Spring Boot 注解—常用注解

    注:该部分内容包含一些常用注解,如果没有学习过java注解的同学可以先看一下上一小节的内容Spring Boot 注解-基本知识 ,不看也没关系,下面就开始本节内容. @Configuration注解 ...

最新文章

  1. 常用的shell脚本案例(14.04.15更新)
  2. Xcode8 注释快捷键无效, 解决方案
  3. STL源码剖析学习七:stack和queue
  4. mybati内sql查询语句在两个日期内
  5. OO实现ALV TABLE 二:ALV显示的三种形式
  6. Linux登陆Mariadb数据库,Mariadb数据库的远程连接(centos 7+ Navicat)
  7. 6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化
  8. Mysql 死锁过程及案例详解之记录锁与间隔锁Record Lock Gap Lock
  9. 蓝卡在哪里_什么是蓝卡,魅力在哪里,让申请者为之着迷?
  10. 用delphi 做服务器,basic4android 实现三层数据交互
  11. totolink 异地组网
  12. 【渝粤教育】国家开放大学2018年春季 7140-22T危急重症护理学(本) 参考试题
  13. ov5640帧率配置_逃离塔科夫怎么提升帧率 帧率优化建议_单机游戏_游戏攻略
  14. 派单o2o全开源版 v11.6.0 全新UI版小程序模块
  15. H5的本地保存localStorage、sessionStorage用法总结
  16. Mybatis-语法笔记
  17. 1219v网卡驱动+linux,黑苹果Intel板载网卡驱动-IntelMausiEthernet.kext下载 V2.5.0d0-PC6苹果网...
  18. 代码评审这点事,元芳你怎么看
  19. payjs插件php,基于payjs的discuz支付插件制作
  20. Deep Retinex Decomposition for Low-Light Enhancement 论文阅读笔记

热门文章

  1. thinkphp5的目录结构和命名规范
  2. 解决在使用numpy.polyfit 时出现的 raise LinAlgError(“SVD did not converge in Linear Least Squares“)错误
  3. Typora入门(1)
  4. TP、TN、FP、FN
  5. .NET多线程编程入门
  6. CF908G New Year and Original Order
  7. 一句话懂什么是JS闭包
  8. Luogu5369 [PKUSC2018]最大前缀和
  9. Hibernate-day04
  10. javascript学习笔记2