Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)

1. 直接接值

只要形参数名和类型与传递参数相同,即可自动接收!

java 复制代码
@Controller
@RequestMapping("param")
public class ParamController {

    /**
     * 前端请求: http://localhost:8080/param/value?name=xx&age=18
     *
     * 可以利用形参列表,直接接收前端传递的param参数!
     *    要求: 参数名 = 形参名
     *          类型相同
     * 出现乱码正常,json接收具体解决!!
     * @return 返回前端数据
     */
    @GetMapping(value="/value")
    @ResponseBody
    public String setupForm(String name,int age){
        System.out.println("name = " + name + ", age = " + age);
        return name + age;
    }
}

2. @RequestParam注解

可以使用 @RequestParam 注释将 Servlet 请求参数(即查询参数或表单数据)绑定到控制器中的方法参数。@RequestParam中的value值只要与传递参数名相同,Spring MVC就可以将数据接入到注解对应的形参中。

@RequestParam使用场景:

  • 指定绑定的请求参数名
  • 要求请求参数必须传递
  • 为请求参数提供默认值

基本用法:

java 复制代码
 /**
 * 前端请求: http://localhost:8080/param/data?name=xx&stuAge=18
 * 
 *  使用@RequestParam注解标记handler方法的形参
 *  指定形参对应的请求参数@RequestParam(请求参数名称)
 */
@GetMapping(value="/data")
@ResponseBody
public Object paramForm(@RequestParam("name") String name, 
                        @RequestParam("stuAge") int age){
    System.out.println("name = " + name + ", age = " + age);
    return name+age;
}

默认情况下,使用此批注的方法参数是必需的,但您可以通过将 @RequestParam 批注的 required 标志设置为 false! 如果没有没有设置非必须,也没有传递参数会出现400错误。

将参数设置非必须,并且设置默认值:

java 复制代码
@GetMapping(value="/data")
@ResponseBody
public Object paramForm(@RequestParam("name") String name, 
                        @RequestParam(value = "stuAge",required = false,defaultValue = "18") int age){
    System.out.println("name = " + name + ", age = " + age);
    return name+age;
}

3. 特殊场景接值

3.1 一名多值

有时候可能会出现一个参数名有多个值,例如多选框,提交的数据的时候一个key对应多个值,我们可以使用集合进行接收。这种情况下,我们将参数类型定义为列表,并添加@RequestParam注解指定即可。

java 复制代码
   /**
    * 前端请求: http://localhost:8080/param/mul?hbs=吃&hbs=喝
    *
    *  一名多值,可以使用集合接收即可!但是需要使用@RequestParam注解指定
    */
   @GetMapping(value="/mul")
   @ResponseBody
   public Object mulForm(@RequestParam List<String> hbs){
       System.out.println("hbs = " + hbs);
       return hbs;
   }

3.2 实体接收

Spring MVC 是 Spring 框架提供的 Web 框架,它允许开发者使用实体对象来接收 HTTP 请求中的参数。通过这种方式,可以在方法内部直接使用对象的属性来访问请求参数,而不需要每个参数都写一遍。下面是一个使用实体对象接收参数的示例:

定义一个用于接收参数的实体类:

java 复制代码
     public class User {
     
       private String name;
     
       private int age = 18;
     
       // getter 和 setter 略
     }

在控制器中,使用实体对象接收,示例代码如下:

java 复制代码
     @Controller
     @RequestMapping("param")
     public class ParamController {
     
         @RequestMapping(value = "/user", method = RequestMethod.POST)
         @ResponseBody
         public String addUser(User user) {
             // 在这里可以使用 user 对象的属性来接收请求参数
             System.out.println("user = " + user);
             return "success";
         }
     }

在上述代码中,将请求参数name和age映射到实体类属性上,要求属性名必须等于参数名!否则无法映射!而且不需要添加注解!

相关推荐
XiaoLeisj2 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck2 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei2 小时前
java的类加载机制的学习
java·学习
Yaml44 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~4 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616884 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7894 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java5 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
睡觉谁叫~~~5 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust
程序媛小果5 小时前
基于java+SpringBoot+Vue的旅游管理系统设计与实现
java·vue.js·spring boot