【1】params

您可以根据请求参数条件缩小请求映射范围。

您可以测试是否存在请求参数(myParam),是否缺少一个(!myParam),或针对特定值(myParam=myValue)。

以下示例显示了如何测试特定值:

@GetMapping(path = "/pets/{petId}", params = "myParam=myValue") 
public void findPet(@PathVariable String petId) {
    // ...
}

您还可以将其用于请求头条件,如下例所示:

@GetMapping(path = "/pets", headers = "myHeader=myValue") 
public void findPet(@PathVariable String petId) {
    // ...
}

简而言之,params是指定request中必须包含某些参数值时,才让该方法处理。

@RequestMapping(value = "testParamsAndHeaders", params = { "username","age!=10" })
public String testParamsAndHeaders() {
    System.out.println("testParamsAndHeaders");
    return SUCCESS;
}

params 只是判断url 或者 form data 中的参数是否复合params的定义,并不会直接绑定数据到方法的参数中,起到一个请求过滤作用。

【2】@PathVariable绑定URL中变量

绑定路径中的占位符参数到方法参数变量中,只能绑定路径中的占位符参数,且路径中必须有参数。无论是 GET 或者POST 只要 URL中有参数即可!

① 前台实例

  • GET实例
Request URL:http://localhost:8080/SpringMVC-1/springmvc/testPathVariable/1
  • POST 实例
<form action="springmvc/testPathVariable/1" method="POST">
    <input type="text" name="username" value=""/>
    <input type="text" name="age" value=""/>
    <input type="text" name="sex" value=""/>
    <input type="submit" value="submit"/>
</form>

【注意】如果URL中无参数,将会出错;如果URL有参数,但是没有使用@PathVariabl该注解,那么URL的参数不会默认与方法参数绑定!方法里的参数会默认绑定表单里面对应的参数!

② 后台代码

如果参数名与占位符一致,则可直接使用@PathVariable。如果不一致,则在@PathVariable( )括号内绑定占位符。

@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id2) {
    System.out.println("testPathVariable: "   id2);
    return SUCCESS;
}

③ 注解源码

@PathVariable 注解指示方法参数应绑定到URI模板变量。支持@RequestMapping注解的处理程序方法。

如果方法参数类型为java.util.Map Map<String,String>,该方法参数将会被所有路径变量name-value填充。

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PathVariable {
    @AliasFor("name")
    String value() default "";
     //路径变量绑定的名称
    @AliasFor("value")
    String name() default "";
    
     //路径变量是否必须。默认为true,当路径变量不存在时抛出异常。
     //如果当路径变量不存在时,你倾向赋予null或者Java 8的Optional,请设置为false,
     //例如,在一个@ModelAttribute注解的方法处理不同的请求时。
    boolean required() default true;

【3】@RequestParam

@RequestParam注解指示方法参数应绑定web请求参数。

Spring MVC和Spring WebFlux中的注解处理程序方法支持如下:

在SpringMVC中,“request parameters”映射查询参数、表单数据和multipart requests中的参数。这是因为ServletAPI将查询参数和表单数据组合到一个a single map called "parameters",其中包括请求body的自动解析。

在Spring WebFlux中,“request parameters”只映射到查询参数。要在三部分起作用(query parameters, form data,and parts in multipart requests),可以使用数据绑定到用@ModelAttribute注解的命令对象。

如果方法参数类型为Map,并且指定了请求参数名称,则假设有适当的转换器可用,则请求参数值将转换为Map。

如果方法参数为java.util.Map Map<String,String>或org.springframework.util.MultiValueMap MultiValueMap<String,String>,如果未指定参数名,则方法参数Map会被所有的请求参数名-值填充。

① 注解源码

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
    @AliasFor("name")
    String value() default "";
    //请求参数要绑定的名称
    @AliasFor("value")
    String name() default "";
/
     //请求参数是否必须,默认为true。如果参数不存在,则抛出异常。
     //你可以选择设置为false或者给予默认值。
    boolean required() default true;
     //当请求参数不存在或为空时,使用默认值。提供一个默认值将会隐形设置required属性为false。
    String defaultValue() default ValueConstants.DEFAULT_NONE;
}

② 前台请求实例

  • GET
<a href="springmvc/testRequestParam?userName=tom&age=11&sex=boy" rel="external nofollow" >
  • POST
<form action="springmvc/testRequestParam" method="POST">
    <input type="text" name="userName" value=""/>
    <input type="text" name="age" value=""/>
    <input type="text" name="sex" value=""/>
    <input type="submit" value="submit"/>
</form>

注意 :

  • GET中的参数形式为:username=tom&age=11&sex=boy
  • POST中的参数形式为:以键值对形式保存在form data

③ 后台代码

@RequestMapping(value="/regist",produces="application/json;charset=utf-8")
@ResponseBody
public String regist(SysUser sysUser , @RequestParam(required=true,name="sex") String sex){
    String userName = sysUser.getUserName();
    String age = sysUser.getAge();
    //...
    return "regist success";
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持Devmax。

方法参数属性params,@PathVariable和@RequestParam用法及区别的更多相关文章

  1. vue中传参params和data的区别

    本文主要介绍了vue中传参params和data的区别,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. Spring/SpringBoot @RequestParam注解无法读取application/json格式数据问题解决

    RequestParam用于将指定的请求参数赋值给方法中的形参,可以接受简单类型属性,也可以接受对象类型,一般用于GET请求,下面这篇文章主要给大家介绍了关于Spring/SpringBoot @RequestParam注解无法读取application/json格式数据问题解决的相关资料,需要的朋友可以参考下

  3. pytorch和tensorflow计算Flops和params的详细过程

    这篇文章主要介绍了pytorch和tensorflow计算Flops和params,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. vue如何通过params和query传值(刷新不丢失)

    这篇文章主要介绍了vue如何通过params和query传值(刷新不丢失),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  5. Spring中@RequestParam使用及遇到的一些坑

    @RequestParam 主要用于将请求参数区域的数据映射到控制层方法的参数上,下面这篇文章主要给大家介绍了关于Spring中@RequestParam使用及遇到的一些坑,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

  6. Yii框架参数配置文件params用法实例分析

    这篇文章主要介绍了Yii框架参数配置文件params用法,结合实例形式分析了Yii框架参数配置文件params相关设置、调用、加载等操作技巧与注意事项,需要的朋友可以参考下

  7. vue中的vue-router query方式和params方式详解

    这篇文章主要介绍了vue中的vue-router query方式和params方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  8. 深入了解query和params的使用区别

    这篇文章主要介绍了深入了解query和params的使用区别,路由传参的时候,有俩兄弟,一个叫query,一个叫parmas,你说他们俩长得也不像吧,可这用法实在是太类似了,下面就让我们分别从vue路由和Node接收两个角度讲他们的区别,需要的朋友可以参考下

  9. 方法参数属性params,@PathVariable和@RequestParam用法及区别

    这篇文章主要介绍了方法参数属性params,@PathVariable和@RequestParam用法及区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  10. vue-router中query和params的区别解析

    vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用,这篇文章主要介绍了vue-router中query和params的区别 ,需要的朋友可以参考下

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部