0


Spring MVC: 请求参数的获取

Spring MVC

在这里插入图片描述

前言

在 Spring MVC 介绍中,谈到前端控制器 DispatcherServlet 接收客户端请求,依据处理器映射 HandlerMapping 配置调用相应的处理器 Controller 。那么,处理器 Controller 具体是如何实现获取请求参数的呢?
在这里插入图片描述

通过 @RequestParam 注解获取请求参数

@RequestParam

@RequestParam,用于在处理器 Controller 方法参数上获取 HTTP 请求参数的值。使用 @RequestParam 注解可以获取请求参数的值以及对请求参数进行类型转换或验证。

简单示例:
首先,创建一个 index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><body><h2>Hello World</h2><formaction="${pageContext.request.contextPath}/paramTest"method="post">
            账号:<inputtype="text"name="name"value=""/><br>
            密码:<inputtype="password"name="password"value=""/><br><inputtype="submit"value="提交"></form></body></html>

接着,创建一个 accessing.jsp

<%--
  Created by IntelliJ IDEA.
  User: dell
  Date: 2023/7/18
  Time: 12:54
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><body><h2>提交成功!</h2></body></html>

然后,获取表单中 name 和 password 参数的值

packagecn.edu.springmvcdemo.controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;@ControllerpublicclassParamDemo{@RequestMapping("/index")publicStringindex1(){return"index";}@RequestMapping("/paramTest")//@RequestParam 的 value 值需要与表单中的参数名字(name值)保持一致,而 paramTest() 方法中的参数名字(str1、str2)可以随机填写publicStringparamTest(@RequestParam(value ="name")int str1,@RequestParam(value ="password")String str2){System.out.println("账号 = "+ str1);System.out.println("密码 = "+ str2);return"accessing";}}

注:当处理器 Controller 方法中的参数名字与表单中的参数名字不一致时,需要 @RequestParam 的 value 值指定参数名字

最后,测试结果
结果如图:
1.输入账号和密码,点击提交
在这里插入图片描述

2.成功提交,跳转到 accessing.jsp
在这里插入图片描述

3.获取到相应的参数值
在这里插入图片描述

用法

1. 在上面的示例中,Spring MVC 会自动根据参数名字来注入,所以 @RequestParam(value = " ") 的部分可以省略,但需要处理器 Controller 方法中的参数名字与表单中的参数名字(name值)保持一致。

如图:
在这里插入图片描述
或者
在这里插入图片描述

2. 在上面的示例中,name 为 int 类型,当输入为空时,数据赋值为 null ,页面会报错。

如图:
1.输入为空,直接点击提交
在这里插入图片描述
2.页面报错
在这里插入图片描述

解决:
1.使用 @RequestParam 注解的 defaultValue 属性设置数据默认值
在这里插入图片描述

2.使用 @RequestParam 注解的 required 属性设置值为 false(默认参数赋值为 null ),并将 int 类型改为 Integer 类型
在这里插入图片描述

通过 ServletAPI 获取请求参数

使用 ServletAPI 获取参数值

简单示例:
通过 HttpServletRequest 获取参数值

packagecn.edu.springmvcdemo.controller;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.UnsupportedEncodingException;@ControllerpublicclassParamDemo{@RequestMapping("/index")publicStringindex1(){return"index";}//1.使用 @RequestParam 注解获取参数值@RequestMapping("/paramTest")publicStringparamTest(@RequestParam(required =false)Integer name,@RequestParamString password){System.out.println("账号 = "+ name);System.out.println("密码 = "+ password);return"accessing";}//2.使用 HttpServletRequest 直接获取参数值@RequestMapping("/paramHSR")publicStringparamHSR(HttpServletRequest req,HttpServletResponse resp)throwsUnsupportedEncodingException{
        req.setCharacterEncoding("UTF-8");int name =Integer.parseInt(req.getParameter("name"));String password = req.getParameter("password");System.out.println("账号 = "+ name);System.out.println("密码 = "+ password);return"accessing";}}

另外,index.jsp 中修改路径
在这里插入图片描述

结果如图:
在这里插入图片描述

通过实体类对象获取请求参数

使用普通 java 对象(POJO)获取参数值

简单示例:
首先,创建一个实体类 ParamUser ,定义账号和密码属性

packagecn.edu.springmvcdemo.model;publicclassParamUser{privateint name;privateString password;publicParamUser(){super();}publicParamUser(int name,String password){this.name = name;this.password = password;}publicintgetName(){return name;}publicStringgetPassword(){return password;}publicvoidsetName(int name){this.name = name;}publicvoidsetPassword(String password){this.password = password;}@OverridepublicStringtoString(){return"ParamUser{"+"name="+ name +", password='"+ password +'\''+'}';}}

接着,通过 ParamUser 对象来调用 get() 方法获取参数值
注:对象属性名字和请求参数名字需要保持一致

packagecn.edu.springmvcdemo.controller;importcn.edu.springmvcdemo.model.ParamUser;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.UnsupportedEncodingException;@ControllerpublicclassParamDemo{@RequestMapping("/index")publicStringindex1(){return"index";}//1.使用 @RequestParam 注解获取参数值@RequestMapping("/paramTest")publicStringparamTest(@RequestParam(required =false)Integer name,@RequestParamString password){System.out.println("账号 = "+ name);System.out.println("密码 = "+ password);return"accessing";}//2.使用 HttpServletRequest 直接获取参数值@RequestMapping("/paramHSR")publicStringparamHSR(HttpServletRequest req,HttpServletResponse resp)throwsUnsupportedEncodingException{
        req.setCharacterEncoding("UTF-8");int name =Integer.parseInt(req.getParameter("name"));String password = req.getParameter("password");System.out.println("账号 = "+ name);System.out.println("密码 = "+ password);return"accessing";}//3.POJO 传值方式获取参数值@RequestMapping("/paramUser")//设置实体类形参publicStringparamUser(ParamUser user){System.out.println("账号 = "+ user.getName());System.out.println("密码 = "+ user.getPassword());return"accessing";}}

另外,index.jsp 中修改路径
在这里插入图片描述

结果如图:
在这里插入图片描述

下面简单介绍处理器 Controller 获取前端其他的请求信息的注解,了解即可。

@RequestHeader:用于将 HTTP 请求头中的参数值映射到处理器 Controller 方法参数中

  • 常用属性如下: – name:参数名称 – required:boolean类型,默认为true,即请求头中必须包含此参数 – defaultParameter:为请求头中的参数提供默认值

@CookieValue:用于从 HTTP 请求的 Cookie 中获取指定的值

  • 常用属性如下: – value:参数名称 – required:boolean类型,默认为true,即请求头中必须包含此参数 – defaultValue:设置 Cookie 的默认值

本文转载自: https://blog.csdn.net/qq_56886142/article/details/131822993
版权归原作者 啊Q老师 所有, 如有侵权,请联系我们删除。

“Spring MVC: 请求参数的获取”的评论:

还没有评论