IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> Spring MVC系列(3)- 获取请求参数的多种方式 -> 正文阅读

[PHP知识库]Spring MVC系列(3)- 获取请求参数的多种方式

前言

在HTTP请求时,参数传递是及获取,是非常重要的一项功能。

SpringMVC提供了很多种方式,具体采用哪种,可以根据实际需求选择。

这里按照常用级别列出几种。

1. 通过方法形参获取

可以在控制器方法的形参位置,设置当前请求的参数。

当访问映射到该方法时,DispatcherServlet会将请求中的参数赋值给相同名字的形参。

    @RequestMapping(value = {"getUser"}, method = {RequestMethod.GET})
    public Object getUser(String username, String password) {
        return username + password;
    }

以上代码,会将请求中的username及password的值赋值给控制器形参,该方法接受到参数后进行后续逻辑处理。

注意事项:

  • 请求参数和控制器参数名称必须一致
  • 参数很多时,不建议使用此方式,三个以上建议封装为java bean传递

2. 通过POJO类获取

可以将多个请求参数封装为对象,需确保对象的属性和请求参数名一致。

请求时,框架会将请求参数封装到形参对象的属性中。


    @RequestMapping(value = {"getUser"}, method = {RequestMethod.GET})
    public Object getUser(User user) {
        return user;
    }

请求后返回的数据:

{"username":"1111","password":"afasfsa","age":null,"name":null,"userId":null}

3. 通过HttpServletRequest 获取

将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象。

    @RequestMapping(value = {"getUser"}, method = {RequestMethod.GET})
    public Object getUser(HttpServletRequest request) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username:" + username + ",password:" + password);
        return "user";
    }

4. 使用@RequestParam注解

@RequestParam主要用于将请求参数中的数据映射到控制层方法的形参。

public @interface RequestParam {
    @AliasFor("name")
    String value() default "";

    @AliasFor("value")
    String name() default "";

    boolean required() default true;

    String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}

@RequestParam的属性解释:

  1. value
    请求中传入参数的名称,如果不设置后台接口的value值,则会默认为该变量名。
  2. required
    该参数是否为必传项,默认是true。
    为ture时,未传递参数会抛出MissingServletRequestParameterException异常。
    为false时,未传递参数参数,引用及包装类型的参数获取到的值为null,基本类型比如int,会抛出IllegalStateException异常。
  3. defaultValue
    参数的默认值,如果请求中没有同名的参数时,该变量默认为此值。
    默认值可以使用SpEL表达式,如"#{systemProperties[‘java.vm.version’]}"

以下代码表示,该请求接口接受name和id参数,其中id为必传项,name参数未传递时,将使用默认值。

    @RequestMapping(value = "/test001")
    public Object test001(@RequestParam(required = false,value = "name",defaultValue = "#{systemProperties['java.vm.version']}") String name,@RequestParam(required = true)int id) {
        return name+id;
    }

5. 使用@RequestHeader

@RequestHeader 是获取请求头中的数据,传递给形参。将请求头信息和控制器方法的形参创建映射关系。

@RequestHeader注解一共有三个属性:value、required、defaultValue,用法同@RequestParam。

以下代码表示将请求头中的“User-Agent”属性值赋值给形参agent。

    @GetMapping("/getHeader")
    public String getRequestHeader(@RequestHeader("User-Agent") String agent) {
        System.out.println(agent);
        return "success";
    }

6. 使用@CookieValue

@CookieValue是将cookie数据和控制器方法的形参创建映射关系。

@CookieValue注解一共有三个属性:value、required、defaultValue,用法同@RequestParam。

以下代码表示将Cookie中JSESSIONID参数的值,传递给形参jId

    @GetMapping("/getCookie")
    public String getCookieValue(@CookieValue(value = "JSESSIONID",required = false) String jId) {
        return jId;
    }

7. 使用@PathVariable

@PathVariable可以使用获取URL占位符中的参数和控制器方法的形参创建映射关系。

@PathVariable注解一共有三个属性:name,value、required,用法同@RequestParam。

以下代码表示将URL中的name及id位置的参数值传递给形参name和id。

    @RequestMapping(value = "/test003/{name}/{id}")
    public Object test003(@PathVariable String name,@PathVariable Integer id) {
        return "test003";
    }
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 23:53:54  更:2021-09-10 23:54:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:19:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码