SpringMVC获取请求参数

文章介绍了在SpringMVC中如何获取HTTP请求的参数,包括通过HttpServletRequest对象的getParameter方法,直接在控制器方法中设置形参匹配请求参数,使用@RequestParam注解指定参数映射,@RequestHeader和@CookieValue来获取请求头和Cookie信息,以及通过实体类自动绑定请求参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过ServletAPI获取 (很少用)

只需要在控制器方法的形参设置HttpServletRequest类型的形参,
就可以在控制器方法中使用request对象获取请求参数。

controller控制层

@RequestMapping("/param/servletAPI")
    public String getParmByServletAPI(HttpServletRequest request){
    String username=request.getParameter("username");
    String password=request.getParameter("password");
    System.out.println("username:"+username+"passworld:"+password);
    return  "success";
    }

thymeleaf渲染页面

<form th:action="@{/param/servletAPI}" method="post">
    用户名:<input type="text" name="username">
    密码:<input type="text" name="password">
    <input type="submit" value="登录">
</form>
<!--success.html-->
<h1>跳转成功</h1>

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

只需要在控制器方法的形参位置,设置一个形参,

形参的名字和请求参数的名字 (表单name属性值等于value属性值) 一致即可。

controller控制层

    @RequestMapping("/param")
    public String getParam(String username,String password){
        System.out.println("username:"+username+"passworld:"+password);
        return "success";
    }

特殊情况 形参和请求参数名字不同

RequestParam

@RequestParam:将请求参数和控制器方法的形参绑定
@RequestParam注解的三个属性:①value,②required,defaultvalue
①value:设置和形参绑定的请求参数的名字
②required:设置是否必须传输value所对应的请求参数,
默认值为true表示value所对应的请求参数必须传输,否则页面报错,
若为false,表示value所对应请求参数不是必须传输,
若为传输,则形参值为null。
③defaultValue:设置当没有传输value所对的请求参数时,为形参设置的默认值,
此时和required属性值无关。

controller控制层

@RequestMapping("/param")
public String getParam(
                    @RequestParam(value = "userName",required = true,defaultValue ="hello")
       String username, String password){
           System.out.println("username:"+username+"passworld:"+password);
                       return "success";
}

@RequestHeader

@RequestHeader:将请求头信息和控制器方法的形参绑定

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

用法同@RequestParam。

@CookieValue

@CookieValue:将cookie数据和控制器方法的形参绑定

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

@RequestMapping("/param/servletAPI")
//当这个请求处理完成后,就会在响应报文里往浏览器响应JSESSIONID,从此之后每次发送请求都会携带cookie
    public String getParmByServletAPI(HttpServletRequest request){
//    获取session对象,请求报文中就有cookie数据了
    HttpSession session = request.getSession();
    String username=request.getParameter("username");
    String password=request.getParameter("password");
    System.out.println("username:"+username+"passworld:"+password);
    return  "success";
    }

@RequestMapping("/param")
//cookievalue注解的value值是获取数据cookie数据cookie的键
public String getParam(@CookieValue("JSESSIONID") String jsessionid){
    System.out.println("jsessionid:"+jsessionid);
//jsessionid:7B77E41C08EE94041881552DA35AA4C6
    return "success";
}

通过POJO获取请求参数

通过控制器方法的实体类型的形参获取请求参数

需要控制器方法的形参位置设置实体类类型的形参,
要保证实体类中的属性的属性名和请求参数的名字一致,
就可以直接把当前请求参数值封装到实体类类型的形参

实体类

public class User {
    private Integer id;
    private String username;
    private String password;
    public User() {
    }
   ....
}

controller控制层

@RequestMapping("/param/pojo")
    public String getParamByPojo(User user){
        System.out.println(user);
 //输出为:User{id=null, username='...', password='...'}
    return "success";
    }

thymeleaf渲染页面

<form th:action="@{/param/pojo}" method="post">
    用户名:<input type="text" name="username">
    密码:<input type="text" name="password">
    <input type="submit" value="登录">
</form>

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

不能用底层javaweb的API解决乱码问题,

因为在springmvc中请求对象是DispatcherServlet给的,所以在DispatcherServlet已经 获取了请求参数,已经不能设置编码问题,设置编码之前,一定不能获取任何请求参数。

web.xml

<!--  配置springmvc的编码过滤器CharacterEncodingFilter-->
  <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>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值