【SpringMVC笔记02】SpringMVC接收请求参数的几种方式

2023年8月14日12:06:37

这篇文章,主要介绍SpringMVC框架中接收请求参数的几种方式。

目录

一、SpringMVC接收请求参数

1.1、通过方法参数接收

1.2、通过HttpServletRequest接收参数

1.3、@RequestParam注解获取参数

1.4、通过JavaBean对象接收参数

1.5、通过@PathVariable注解获取参数


一、SpringMVC接收请求参数

这篇文章主要总结一下SpringMVC框架中,如何接收HTTP请求的参数,主要有如下几种常见的方式。

1.1、通过方法参数接收

SpringMVC框架里面,我们可以直接在【Controller】层对应的方法参数里面,编写我们需要接收的参数名称,这样SpringMVC框架就会自动将我们的请求参数和方法参数进行映射绑定。

  • 编写如下测试案例。
@Controller
public class ParamController {
    
    // 请求参数和方法参数自动映射
    @RequestMapping("/param01")
    public String param01(String username, String password) {
        System.out.println("username=" + username);
        System.out.println("password=" + password);
        return "hello";
    }
    
}
  • 启动工程,浏览器访问:【http://localhost:8080/springmvc/param01】,然后查看控制台输出结果。
  • 访问时候携带参数:【http://localhost:8080/springmvc/param01?username=root&password=123456】。

  • SpringMVC中,如果接收的参数名称和方法参数名称不同,那么对应的方法参数默认就是null。 

1.2、通过HttpServletRequest接收参数

在SpringMVC框架中,我们的方法参数里面可以直接使用servlet中的请求对象,要使用servlet的相关api,那么我们需要引入【servlet-api】的依赖,如下所示:

  • 添加【servlet-api】依赖,目的是为了可以在项目中使用servlet相关的类代码。
<!-- 引入servlet-api依赖 -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <!-- 作用域设置为已被提供: 表示servlet-api依赖会被Tomcat容器提供,
  打包时候不会再将servlet-api加入到里面 -->
  <scope>provided</scope>
</dependency>
  • 通过【HttpServletRequest】获取请求参数。
@Controller
public class ParamController {

    // HttpServletRequest获取参数
    @RequestMapping("/param02")
    public String param02(HttpServletRequest request) {
        System.out.println("username=" + request.getParameter("username"));
        System.out.println("password=" + request.getParameter("password"));
        return "hello";
    }
}
  • 这种获取参数的方式就是最原始的,直接从HTTP请求里面获取。

1.3、@RequestParam注解获取参数

通过【1.1】的方式获取参数时候,如果我们的前端参数名称和后端方法参数名称不一致,就无法获取到对应的参数值,为了解决前后端参数名称不一致的问题,SpringMVC框架提供了【@RequestParam】注解,解决参数名称不一致的问题。

@Controller
public class ParamController {

    // HttpServletRequest获取参数
    @RequestMapping("/param03")
    public String param03(@RequestParam("uname") String username, @RequestParam("pass") String password) {
        System.out.println("username=" + username);
        System.out.println("password=" + password);
        return "hello";
    }
    
}
  • 浏览器访问地址:【http://localhost:8080/springmvc/param01?uname=root&pass=123456】。
  • 注意:浏览器的请求参数名称是uname、pass,而后端方法参数名称是:username、password。

1.4、通过JavaBean对象接收参数

存在这样一种情况,当我们的前端参数数量特别多的时候,如果按照方法参数来接收,那么此时一个方法里面可能就需要写几十个参数名称,显然这样是不合理的,解决这个问题的办法就是通过一个对象来接收前端所有的参数,这个对象就是我们说的一个JavaBean,也就是pojo实体类对象。

  • 创建【User】实体类。
public class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
  • 通过【Bean】对象接收参数。
@Controller
public class ParamController {

    // HttpServletRequest获取参数
    @RequestMapping("/param04")
    public String param04(User user) {
        System.out.println("username=" + user.getUsername());
        System.out.println("password=" + user.getPassword());
        return "hello";
    }

}
  • 浏览器访问:【http://localhost:8080/springmvc/param04?username=root&password=123456】。
  • 可以发现,后端依然可以获取到对应的参数值。

1.5、通过@PathVariable注解获取参数

在Restful风格的HTTP请求里面,有些请求参数会直接放在请求路径里面,并且没有参数名称,对于这种在请求路径中并且没有参数名称的请求参数,SpringMVC框架提供了【@PathVariable】注解进行获取,这种获取参数的方式,叫做:【路径参数】

  • 路径参数,类似于:【/api/param01/root/123456】。(红色字体表示参数值,其余表示请求路径)。
  • SpringMVC里面,路径参数语法格式如下:

路径参数:【/请求路径/{参数名称1}/{参数名称2}

  • 路径参数需要使用【{}】花括号括起来,参数名称任意。
@Controller
public class ParamController {

    // HttpServletRequest获取参数
    @RequestMapping("/param05/{username}/{password}")
    public String param05(@PathVariable String username, @PathVariable String password) {
        System.out.println("username=" + username);
        System.out.println("password=" + password);
        return "hello";
    }

}
  • 路径参数中的参数名称需要和方法参数名称一致,这样SpringMVC才能够将其进行映射;
  • 也可以通过指定【@PathVariable】注解的【value】属性值来关联路径参数。
@Controller
public class ParamController {

    // HttpServletRequest获取参数
    @RequestMapping("/param05/{uname}/{pass}") {
    public String param05(@PathVariable("uname") String username, @PathVariable("pass") String password) {
        System.out.println("username=" + username);
        System.out.println("password=" + password);
        return "hello";
    }

}
  • 上面两种方式都可以,但是实际开发中,还是采用第二种,尽量指定【@PathVariable】注解的【value】属性值,因为这样更容易理解,并且可以确保不出错。

综上,这篇文章结束了,主要介绍SpringMVC框架中接收请求参数的几种常见方式。

【源代码地址:https://gitee.com/zhuyoubin/ssm_code/tree/master/spring-mvc/springmvc-demo02】。

  • 作者:朱友斌
  • 原文链接:https://blog.csdn.net/qq_39826207/article/details/125304610
    更新时间:2023年8月14日12:06:37 ,共 3995 字。