详解 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='[email protected]'}

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

相关推荐
有梦想的攻城狮2 小时前
spring中的@MapperScan注解详解
java·后端·spring·mapperscan
柚个朵朵3 小时前
Spring的Validation,这是一套基于注解的权限校验框架
java·后端·spring
程序员小杰@3 小时前
【MCP教程系列】SpringBoot 搭建基于 Spring AI 的 SSE 模式 MCP 服务
人工智能·spring boot·spring
程序员buddha4 小时前
Spring & Spring Boot 常用注解整理
java·spring boot·spring
C_V_Better4 小时前
Java Spring Boot 控制器中处理用户数据详解
java·开发语言·spring boot·后端·spring
LUCIAZZZ6 小时前
JVM之虚拟机运行
java·jvm·spring·操作系统·springboot
神秘的t7 小时前
Spring Web MVC————入门(2)
java·spring·mvc
冷心笑看丽美人7 小时前
Spring MVC数据绑定和响应 你了解多少?
java·spring·mvc
蒂法就是我10 小时前
详细说说Spring的IOC机制
java·后端·spring
唐僧洗头爱飘柔952711 小时前
【SSM-SpringMVC(二)】Spring接入Web环境!本篇开始研究SpringMVC的使用!SpringMVC数据响应和获取请求数据
java·spring·文件上传·页面跳转·数据响应·获取请求数据·静态资源访问