SpingMVC获取请求参数

通过ServletAPI获取请求参数

  • 将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的

参数表示封装了当前请求的请求报文的对象。

html

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

controller

    @RequestMapping("/param/servletAPI")
//    要用servlet的API,只需在控制器方法的参数设置
    public String getParmByServletAPI(HttpServletRequest request){
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username:"+username);
        System.out.println("password:"+password);
        return "success";
    }

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

浏览器和服务器的参数名称一致情况

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

形参的名字要和请求参数的名字一致即可。

html

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

controller

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

参数名称不一致情况用@RequestParam注解

@RequestParam是将请求参数和控制器方法的形参创建映射关系。

@RequestParam注解的三个属性:

value:设置绑定的请求参数的名字
required:设置是否必须传输此请求参数,默认值为true,
表示当前请求必须传输value所指定的请求参数,否则报错400
defaultValue:设置当没有传输value所对应的请求参数时,
为形参设置的默认值,此时和required属性值无关。
    @RequestMapping("/param")
    public String getParam(@RequestParam("userName") String username, String password){
        System.out.println("username:"+username);
        System.out.println("password:"+password);
        return "success";
    }

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

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

通过pojo获取请求参数

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

需要在控制器方法的形参位置设置实体类类型的形参,
保证实体类类中属性的属性名和请求参数的名字一致,
那么请求参数就会为此属性赋值,
然后就可以通过实体类类型的形参获取请求参数。

实体类

public class User {
    private Integer id;
    private String username;
    private String password;

    public User() {
    }
  .......
}

html

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

controller

    @RequestMapping("/param/pojo")
//    前提是保证属性名和请求参数的名字一致
    public String getParamByPojo(User user){
        System.out.println("user:"+user);
        return "success";
    }

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

在控制器方法中写解决乱码问题的代码是不行的:

因为在DispatcherServlet已经将请求参数获取过了,
然后才可以在形参位置获取,所以在这里设置解决编码问题没有用了。
注意: 设置编码代码有个要求,在设置编码之前,
一定不能获取任意请求参数,只要获取了设置的编码就没有作用。

在web.xml配置编码过滤器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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值