一篇文章弄懂Spring MVC的参数绑定

 更新时间:2019年02月14日 11:04:01   作者:java_lover  
这篇文章主要给大家介绍了关于如何通过一篇文章弄懂Spring MVC的参数绑定,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

参数绑定,简单来说就是客户端发送请求,而请求中包含一些数据,那么这些数据怎么到达 Controller ?这在实际项目开发中也是用到的最多的,那么 SpringMVC 的参数绑定是怎么实现的呢?

下面我们来详细的讲解。

SpringMVC参数绑定,简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上,然后就可以在controller中使用该参数了

下面通过5个常用的注解演示下如何进行参数绑定:

1. @PathVariable注解

@PathVariable 是用来获得请求url中的动态参数的,可以将URL中的变量映射到功能处理方法的参数上,其中URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。

示例代码:

 @ResponseBody
 @RequestMapping("/testUrlPathParam/{param1}/{param2}")
 public void testUrlPathParam(HttpServletRequest request, @PathVariable String param1,
     @PathVariable String param2) {
 System.out.println("通过PathVariable获取的参数param1=" + param1);
 System.out.println("通过PathVariable获取的参数param2=" + param2);
 }

Postman发送请求截图:

输出结果:

通过PathVariable获取的参数param1=1
通过PathVariable获取的参数param2=2

2.@RequestHeader注解

@RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上。

示例代码:

 @ResponseBody
 @RequestMapping("/testHeaderParam")
 public void testHeaderParam(HttpServletRequest request, @RequestHeader String param1) {
 System.out.println("通过RequestHeader获取的参数param1=" + param1);
 }

Postman发送请求截图:

输出结果:

通过RequestHeader获取的参数param1=abc

3.@CookieValue注解

@CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上。

示例代码:

 @ResponseBody
 @RequestMapping("/testCookieParam")
 public void testCookieParam(HttpServletRequest request, HttpServletResponse response,
         @CookieValue String sessionid) {
  System.out.println("通过CookieValue获取的参数sessionid=" + sessionid);
 }

Postman发送请求截图:

输出结果:

通过CookieValue获取的参数sessionid=ebef978eef6c46f8a95cc0990d2d360a

4.@RequestParam注解

@RequestParam注解用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。提交方式为get或post。(Http协议中,form的enctype属性为编码方式,常用有两种:application/x-www-form-urlencoded和multipart/form-data,默认为application/x-www-form-urlencoded);

@RequestParam注解实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段,
get方式中queryString的值,和post方式中body data的值都会被Servlet接受到并转化到Request.getParameter()参数集中,所以@RequestParam可以获取的到;

该注解有三个属性: value、required、defaultValue; value用来指定要传入值的id名称,required用来指示参数是否必录,defaultValue表示参数不传时候的默认值。

示例代码:

 @ResponseBody
 @RequestMapping("/testRequestParam")
 public void testRequestParam(HttpServletRequest request,
         @RequestParam(value = "num", required = true, defaultValue = "0") int num) {
  System.out.println("通过RequestParam获取的参数num=" + num);
 }

Postman发送请求截图:


输出结果:

通过RequestParam获取的参数num=10

5.@RequestBody注解

@RequestBody注解用来处理HttpEntity(请求体)传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据;

GET请求中,因为没有HttpEntity,所以@RequestBody并不适用;

POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。

示例代码:

 @ResponseBody
 @RequestMapping("/testRequestBody")
 public void testRequestBody(HttpServletRequest request, @RequestBody String bodyStr){
  System.out.println("通过RequestBody获取的参数bodyStr=" + bodyStr);
 }

Postman发送请求截图:

代码运行结果:

通过RequestBody获取的参数bodyStr=这是body的内容

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Java实战小技巧之数组与list互转

    Java实战小技巧之数组与list互转

    在Java中,经常遇到需要List与数组互相转换的场景,下面这篇文章主要给大家介绍了关于Java实战小技巧之数组与list互转的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-08-08
  • stream中使用peek一些陷阱避免及解决方法

    stream中使用peek一些陷阱避免及解决方法

    这篇文章主要为大家介绍了stream中使用peek一些陷阱避免及解决方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • springboot整合druid及多数据源配置的demo

    springboot整合druid及多数据源配置的demo

    这篇文章主要介绍了springboot整合druid及多数据源配置的demo,本篇主要分两部分 ①springboot整合druid的代码配置,以及druid的监控页面演示;②对实际场景中多数据源的配置使用进行讲解,需要的朋友可以参考下
    2024-01-01
  • SpringBoot中实现分布式的Session共享的详细教程

    SpringBoot中实现分布式的Session共享的详细教程

    这篇文章主要介绍了SpringBoot中实现分布式的Session共享,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Java中I/O流读取数据不完整的问题解决

    Java中I/O流读取数据不完整的问题解决

    本文主要介绍了ava中I/O流读取数据不完整的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 在Action中以Struts2的方式输出JSON数据的实例

    在Action中以Struts2的方式输出JSON数据的实例

    下面小编就为大家带来一篇在Action中以Struts2的方式输出JSON数据的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Java中的Gradle与Groovy的区别及存在的关系

    Java中的Gradle与Groovy的区别及存在的关系

    这篇文章主要介绍了Java中的Gradle与Groovy的区别及存在的关系,Groovy是一种JVM语言,它可以编译为与Java相同的字节码,并且可以与Java类无缝地互操作,Gradle是Java项目中主要的构建系统之一,下文关于两者的详细内容,需要的小伙伴可以参考一下
    2022-02-02
  • 关于springboot集成阿里云短信的问题

    关于springboot集成阿里云短信的问题

    这篇文章主要介绍了springboot集成阿里云短信的方法,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • Kotlin 基础语法详细介绍

    Kotlin 基础语法详细介绍

    这篇文章主要介绍了Kotlin 基础语法详细介绍的相关资料,需要的朋友可以参考下
    2017-05-05
  • 浅谈SpringBoot如何封装统一响应体

    浅谈SpringBoot如何封装统一响应体

    今天带各位小伙伴学习SpringBoot如何封装统一响应体,文中有非常详细的介绍及代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05

最新评论