详解 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的配置文件中配置字符编码过滤器,将请求参数的编码设置为正确的编码方式,以解决乱码问题。

相关推荐
海波东6 小时前
某m大厂面经1
java·spring
荆州克莱6 小时前
Mysql学习笔记(一):Mysql的架构
spring boot·spring·spring cloud·css3·技术
程序猿锦鲤10 小时前
减少 try...catch,定义全局统一异常处理器!
java·开发语言·spring
IT枫斗者14 小时前
Springboot配置全局异常通用返回
java·服务器·spring boot·后端·spring·状态模式
Be_Somebody17 小时前
Maven打包项目的精准指定——流程管理
java·spring boot·spring·spring入门
鹿屿二向箔17 小时前
基于SSM(Spring + Spring MVC + MyBatis)框架的快递管理系统
spring·mvc·mybatis
黑马师兄18 小时前
SpringMVC
java·后端·spring
计算机聚众网络19 小时前
008_SSH_Sqlserverl图书管理系统(学生注册 借书 还书)_lwplus87(免费送)
java·spring boot·spring·eclipse·maven·hibernate
cuisidong199719 小时前
Spring声明式事务 编程式事务
java·数据库·spring
南城花随雪。20 小时前
Spring框架之策略模式 (Strategy Pattern)
java·spring·策略模式