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

相关推荐
Java码农也是农21 小时前
Spring 事务详解:@Transactional 如何生效、何时回滚、传播行为怎么选
java·spring boot·spring·事务
驭渊的小故事2 天前
Spring AOP 核心概念与通知类型详解
java·后端·spring
驭渊的小故事2 天前
Spring AOP 入门:从 AOP 概念到第一个耗时统计切面
java·后端·spring
CoderYanger2 天前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第二弹)
java·数据库·spring boot·spring·面试·java-ee·mybatis
CQU_JIAKE2 天前
11.7[高体】
java·后端·spring
露天赏雪4 天前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
captain3764 天前
▲统一功能——DispatcherServlet源码分析
java·spring·java-ee·log4j·maven
TeamDev4 天前
使用 JxBrowser 在桌面应用中集成 Spring
java·前端·后端·spring·混合应用·jxbrowser·浏览器控件
SL_staff5 天前
从配置失效到逻辑复用:JVS-Logic 如何构建可治理的业务编排中枢
java·spring·产品
程序员吕洞宾5 天前
开源多维表格SmartTable v1.6.10 —— 用户名登录、数据评论及@人、表单分享二维码、性能优化、部署及升级优化
spring·性能优化·开源