详解 SpringMVC 中获取请求参数

文章目录

在Spring MVC中,获取请求参数有很多种方式,先来个开盘小菜,使用@RequestParam注解来获取请求参数。

@RequestParam注解可以用于方法的参数上,用于指定请求参数的名称。例如,如果你的请求参数名为"username",你可以在方法参数上使用@RequestParam("username")来获取该参数的值。

java 复制代码
@Controller
public class MyController {

    @RequestMapping("/myEndpoint")
    public String myEndpoint(@RequestParam("username") String username) {
        // 在这里可以使用username参数进行处理
        return "result";
    }
}

在上面的示例中,当请求到达"/myEndpoint"时,Spring MVC将会自动将名为"username"的请求参数的值赋给方法参数username。你可以根据自己的需求来处理这个参数。

下面来详细说明下SpringMVC获取请求参数

1、通过ServletAPI获取

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

java 复制代码
@RequestMapping("/testParam")
public String testParam(HttpServletRequest request){
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    System.out.println("username:"+username+",password:"+password);
    return "success";
}

2、通过控制器方法的形参获取请求参数

在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在DispatcherServlet中就会将请求参数赋值给相应的形参

html 复制代码
<a th:href="@{/testParam(username='admin',password=123456)}">
  测试获取请求参数-->/testParam</a><br>
java 复制代码
@RequestMapping("/testParam")
public String testParam(String username, String password){
    System.out.println("username:"+username+",password:"+password);
    return "success";
}

注:

若请求所传输的请求参数中有多个同名的请求参数,此时可以在控制器方法的形参中设置字符串数组或者字符串类型的形参接收此请求参数

若使用字符串数组类型的形参,此参数的数组中包含了每一个数据

若使用字符串类型的形参,此参数的值为每个数据中间使用逗号拼接的结果

3、@RequestParam

@RequestParam是将请求参数和控制器方法的形参创建映射关系

@RequestParam注解一共有三个属性:

value:指定为形参赋值的请求参数的参数名

required:设置是否必须传输此请求参数,默认值为true

若设置为true时,则当前请求必须传输value所指定的请求参数,若没有传输该请求参数,且没有设置defaultValue属性,则页面报错400:Required String parameter 'xxx' is not present;若设置为false,则当前请求不是必须传输value所指定的请求参数,若没有传输,则注解所标识的形参的值为null

defaultValue:不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为""时,则使用默认值为形参赋值

4、@RequestHeader

@RequestHeader是将请求头信息和控制器方法的形参创建映射关系

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

5、@CookieValue

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

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

6、通过POJO获取请求参数

可以在控制器方法的形参位置设置一个实体类类型的形参,此时若浏览器传输的请求参数的参数名和实体类中的属性名一致,那么请求参数就会为此属性赋值

html 复制代码
<form th:action="@{/testpojo}" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    性别:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女">女<br>
    年龄:<input type="text" name="age"><br>
    邮箱:<input type="text" name="email"><br>
    <input type="submit">
</form>
java 复制代码
@RequestMapping("/testpojo")
public String testPOJO(User user){
    System.out.println(user);
    return "success";
}
//最终结果-->User{id=null, username='张三', password='123', age=23, sex='男', email='123@qq.com'}

7、解决获取请求参数的乱码问题

解决获取请求参数的乱码问题,可以使用SpringMVC提供的编码过滤器CharacterEncodingFilter,但是必须在web.xml中进行注册

xml 复制代码
<!--配置springMVC的编码过滤器-->
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceResponseEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

注:

SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效

总结

本篇文章的主要内容:

  1. 通过ServletAPI获取:你可以使用HttpServletRequest对象来获取请求参数。可以通过调用request.getParameter("参数名")方法来获取指定参数的值。

  2. 通过控制器方法的形参获取请求参数:你可以在控制器方法的参数上直接声明参数名,Spring MVC会自动将请求参数的值赋给对应的参数。

  3. @RequestParam注解:你可以在控制器方法的参数上使用@RequestParam注解来获取请求参数。通过指定@RequestParam("参数名"),Spring MVC会将请求参数的值赋给对应的参数。

  4. @RequestHeader注解:你可以在控制器方法的参数上使用@RequestHeader注解来获取请求头信息。通过指定@RequestHeader("头字段名"),Spring MVC会将请求头的值赋给对应的参数。

  5. @CookieValue注解:你可以在控制器方法的参数上使用@CookieValue注解来获取Cookie的值。通过指定@CookieValue("Cookie名"),Spring MVC会将Cookie的值赋给对应的参数。

  6. 通过POJO获取请求参数:你可以创建一个POJO类,将请求参数的名称与POJO类的属性名对应起来,Spring MVC会自动将请求参数的值赋给POJO类的属性。

  7. 解决获取请求参数的乱码问题:如果请求参数存在乱码问题,你可以在Spring MVC的配置文件中配置字符编码过滤器,将请求参数的编码设置为正确的编码方式,以解决乱码问题。

相关推荐
草莓base10 小时前
【手写一个spring】spring源码的简单实现--bean对象的创建
java·spring·rpc
乌啼霜满天24910 小时前
Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系
java·spring boot·spring·mvc
Elaine20239110 小时前
零碎04 MybatisPlus自定义模版生成代码
java·spring·mybatis
.生产的驴13 小时前
SpringCloud OpenFeign用户转发在请求头中添加用户信息 微服务内部调用
spring boot·后端·spring·spring cloud·微服务·架构
码蜂窝编程官方15 小时前
【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的虎鲸旅游攻略网的设计与实现
java·vue.js·spring boot·后端·spring·旅游
AuroraI'ncoding16 小时前
时间请求参数、响应
java·后端·spring
计算机毕设指导618 小时前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
ExiFengs20 小时前
实际项目Java1.8流处理, Optional常见用法
java·开发语言·spring
瓜牛_gn20 小时前
依赖注入注解
java·后端·spring
一元咖啡21 小时前
SpringCloud Gateway转发请求到同一个服务的不同端口
spring·spring cloud·gateway