• Spring @RequestParam注释


    1. 概述

    在这个快速教程中,我们将探讨Spring的@RequestParam注释及其属性。

    简而言之,我们可以使用@RequestParam从请求中提取查询参数,表单参数甚至文件。

    2. 简单的映射

    假设我们有一个端点 /api/foos,它采用一个名为 id 的查询参数:

    1. @GetMapping("/api/foos")
    2. @ResponseBody
    3. public String getFoos(@RequestParam String id) {
    4. return "ID: " + id;
    5. }

    在此示例中,我们使用 @RequestParam 来提取 id 查询参数。

    一个简单的 GET 请求将调用获取:

    1. http://localhost:8080/spring-mvc-basics/api/foos?id=abc
    2. ----
    3. ID: abc

    接下来,让我们看一下注释的属性:名称必需默认值

    3. 指定请求参数名称

    在前面的示例中,变量名称和参数名称是相同的。

    不过,有时我们希望这些是不同的。或者,如果我们不使用Spring Boot,我们可能需要进行特殊的编译时配置,否则参数名称实际上不会在字节码中。

    幸运的是,我们可以使用 name 属性配置@RequestParam名称

    1. @PostMapping("/api/foos")
    2. @ResponseBody
    3. public String addFoo(@RequestParam(name = "id") String fooId, @RequestParam String name) {
    4. return "ID: " + fooId + " Name: " + name;
    5. }

    我们也可以做@RequestParam(值= “id”)或只是@RequestParam(“id”)。

    4. 可选请求参数

    默认情况下,使用@RequestParam批注的方法参数是必需的。

    这意味着,如果请求中不存在该参数,我们将收到错误:

    1. GET /api/foos HTTP/1.1
    2. -----
    3. 400 Bad Request
    4. Required String parameter 'id' is not present

    但是,我们可以将@RequestParam配置为可选,并具有必需的属性:

    1. @GetMapping("/api/foos")
    2. @ResponseBody
    3. public String getFoos(@RequestParam(required = false) String id) {
    4. return "ID: " + id;
    5. }

    在这种情况下,两者:

    1. http://localhost:8080/spring-mvc-basics/api/foos?id=abc
    2. ----
    3. ID: abc

    1. http://localhost:8080/spring-mvc-basics/api/foos
    2. ----
    3. ID: null

    将正确调用该方法。

    如果未指定该参数,则方法参数将绑定为 null

    4.1. 使用 Java 8 可选

    或者,我们可以将参数包装在可选中:

    1. @GetMapping("/api/foos")
    2. @ResponseBody
    3. public String getFoos(@RequestParam Optional id){
    4. return "ID: " + id.orElseGet(() -> "not provided");
    5. }

    在这种情况下,我们不需要指定所需的属性。

    如果未提供请求参数,则将使用默认值:

    1. http://localhost:8080/spring-mvc-basics/api/foos
    2. ----
    3. ID: not provided

    5. 请求参数的默认值

    我们还可以使用默认值属性将默认值设置为@RequestParam

    1. @GetMapping("/api/foos")
    2. @ResponseBody
    3. public String getFoos(@RequestParam(defaultValue = "test") String id) {
    4. return "ID: " + id;
    5. }

    这就像 required=false,因为用户不再需要提供参数

    1. http://localhost:8080/spring-mvc-basics/api/foos
    2. ----
    3. ID: test

    虽然,我们仍然可以提供它:

    1. http://localhost:8080/spring-mvc-basics/api/foos?id=abc
    2. ----
    3. ID: abc

    请注意,当我们设置默认值属性时,“必需”确实设置为 false

    6. 映射所有参数

    我们还可以使用Map来定义多个参数,而无需定义它们的名称或计数:

    1. @PostMapping("/api/foos")
    2. @ResponseBody
    3. public String updateFoos(@RequestParam Map allParams) {
    4. return "Parameters are " + allParams.entrySet();
    5. }

    然后,这将反映发送的任何参数:

    1. curl -X POST -F 'name=abc' -F 'id=123' http://localhost:8080/spring-mvc-basics/api/foos
    2. -----
    3. Parameters are {[name=abc], [id=123]}

    7. 映射多值参数

    单个@RequestParam可以有多个值:

    1. @GetMapping("/api/foos")
    2. @ResponseBody
    3. public String getFoos(@RequestParam List id) {
    4. return "IDs are " + id;
    5. }

    春季 MVC 将映射一个逗号分隔的 id 参数

    1. http://localhost:8080/spring-mvc-basics/api/foos?id=1,2,3
    2. ----
    3. IDs are [1,2,3]

    或单独 id 参数的列表

    1. http://localhost:8080/spring-mvc-basics/api/foos?id=1&id=2
    2. ----
    3. IDs are [1,2]

    8. 结论

    在本文中,我们学习了如何使用@RequestParam。

    示例的完整源代码可以在 GitHub 项目中找到。

  • 相关阅读:
    doris通关之概念、架构篇
    使用nrm 方式 管理npm 仓库
    科技云报道:AI写小说、绘画、剪视频,生成式AI更火了!
    我国智慧城市场景中物联网终端评测与认证体系研究
    理想之光不灭
    (附源码)springboot小型仪器公司生产管理系统 毕业设计 031853
    浅谈HTTP缓存与CDN缓存的那点事
    Qt开发经验小技巧231-235
    微信小程序去除默认滚动条展示
    Java区分子类方法中重名的三种变量
  • 原文地址:https://blog.csdn.net/allway2/article/details/127424896