controller中的@PathVariable

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了controller中的@PathVariable相关的知识,希望对你有一定的参考价值。

参考技术A @PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值,

@PathVariable("xxx")

通过 @PathVariable 可以将URL中占位符参数xxx,绑定到处理器类的方法形参中@PathVariable(“xxx“)

只有一个参数的情况下,可以省略@PathVariable括号后的参数

写法二

有两个参数的情况下@PathVariable括号后参数的值必须与mapping占位符中的名称一致

一篇文章搞定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发送请求截图:

一篇文章搞定SpringMVC参数绑定
发送请求截图

输出结果:

通过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发送请求截图:

一篇文章搞定SpringMVC参数绑定
发送请求截图

输出结果:

通过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发送请求截图:

一篇文章搞定SpringMVC参数绑定

输出结果:

通过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发送请求截图:

一篇文章搞定SpringMVC参数绑定
发送请求截图

代码运行结果:

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



一篇文章搞定SpringMVC参数绑定

在 GitHub 更新中,欢迎关注,欢迎star。

 

直面Java第207期:Stream并发编程中的有序性是什么?

成神之路第015期:设计模式:单例模式

深入并发第007期:硬件升级带来了什么问题?

- MORE | 更多精彩文章 -






如果你喜欢本文,

请长按二维码,关注 Hollis.

以上是关于controller中的@PathVariable的主要内容,如果未能解决你的问题,请参考以下文章

spring常用注解

MockMvc control层单元测试 参数传递问题

MockMvc control层单元测试 参数传递问题

@PathVariable和@RequestParam的区别

一篇文章搞定SpringMVC参数绑定

@PathVariable这有啥作用