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

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

在使用SpringMVC框架后,在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在DispatcherServlet中就会将请求参数赋值给相应的形参。而这里在SpringMVC中同样可以通过ServletAPI获取,而这种原生的方式用到的很少

获取请求参数的方式:

1.通过servletAPI获取(原生方式用的不多)

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

2.通过控制器方法的形参获取

只需要在控制器方法的形参位置,设置一个形参,形参的名字和请求参数的名字一致即可

3.形参中使用到的注解
3.1.@RequestParam:将请求参数和控制器方法的形参绑定

@RequestParam注解的三个属性:value、required、defaultValue
-value:设置和形参绑定的请求参数的名字
-required:来设置是否必须传输value所对应的参数,
默认值为true,表示value所对应的请求参数必须传输,否则页面报错:400 - Required String parameter ‘xxx’ is not present
若设置为false,则表示value所对应的请求参数不是必须传输,若未传输则形参值为null
-defaultValue:设置当没有传输value所对应的请求参数时,为形参设置默认值,此时和required属性值无关

3.2.@RequestHeader:将请求头信息和控制器方法的形参绑定
3.3.@CookieValue:将Cookie数据和控制器方法的形参绑定

-@RequestHeader,@CookieValue用法跟@RequestParam一样都有value、required、defaultValue三个属性

以下时代码的实现:
1.通过servletAPI获取

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    <form th:action="@{/param/servletAPI}" method="post">
        用户名:<input type="text" name="userName"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="登录"><br>
    </form>
</body>
</html>
package com.qcw.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Controller
public class TestParamController {
    
    

    @RequestMapping("/param/servletAPI")
    public String getParamByServletAPI(HttpServletRequest request){
    
    

        HttpSession session = request.getSession();

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username = " + username+",password = " + password);
        return "success";
    }
}

2.通过控制器方法的形参获取

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    <form th:action="@{/param}" method="post">
        用户名:<input type="text" name="userName"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="登录"><br>
    </form>
</body>
</html>
package com.qcw.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
    @RequestMapping("/param")
    public String getParam(@RequestParam(value = "userName", required = true, defaultValue = "hello") String username,
                           @RequestParam("password") String password,
                           @RequestHeader("referer") String referer,
                           @CookieValue("JSESSIONID") String jsessionId
    ){
    
    
        System.out.println("jsessionId = " + jsessionId);
        System.out.println("referer = " + referer);
        System.out.println("username = " + username+",password = " + password);
        return "success";
    }
}

猜你喜欢

转载自blog.csdn.net/qq_47637405/article/details/127065976