• 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的内容

    推荐阅读
    1.SpringCloud系列-整合Hystrix的两种方式)
    2.SpringCloud系列-利用Feign实现声明式服务调用)
    3.手把手带你利用Ribbon实现客户端的负载均》
    4.SpringCloud搭建注册中心与服务注册
    5.Spring Boot配置过滤器的两种方式!


    限时领取免费Java相关资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高并发分布式、大数据、机器学习等技术。
    关注下方公众号即可免费领取:

    Java碎碎念公众号Java碎碎念公众号

     

  • 相关阅读:
    《RTC — RTC相关操作以及如何同步系统时间》
    《关闭服务器,再次启动服务器提示bind:address already in use》
    《海思中内存分配和优化》
    《开发板 — 查看共享内存情况》
    《通过himm读取指定引脚并保存在共享内存中》
    《开发板 — 格式化TF卡》
    《网络编程 — UDP》
    《网络编程 — 服务器中bind的ip地址是什么》
    《使用gdb中core dump》
    《 Linux套接字编程中的5个隐患 》
  • 原文地址:https://www.cnblogs.com/haha12/p/11725287.html
Copyright © 2020-2023  润新知