SpringMVC(4)— “SpringMVC获取请求参数的方法”


一、通过ServletAPI获取

这种方式在开发中一般不用,不然框架就没有意义了

将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象

@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";
}

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

在控制器方法的形参位置,设置和请求参数 同名 的形参,当浏览器发送请求,匹配到请求映射时,在DispatcherServlet中就会将请求参数赋值给相应的形参

注意:控制器方法的形参名 必须和 请求路径中的参数名相同!

<a th:href="@{/test2(username='admin',id=1)}">控制器方法获取同名请求参数</a>
 @RequestMapping(value = "/test2")
 	//方法的形参名与路径中的参数名相同,才可以成功获取到参数值
    public String test2(String id,String username){
    
    
        System.out.println("id="+id+",username="+username);
        return "target";
    }

注:
(1)若请求所传输的请求参数中有多个同名的请求参数,此时可以在控制器方法的形参中设置字符串数组或者字符串类型的形参接收此请求参数;
(2)若使用字符串数组类型的形参,此参数的数组中包含了每一个数据;
(3)若使用字符串类型的形参,此参数的值为每个数据中间使用逗号拼接的结果。

三、@RequestParam获取不同名参数

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

也就是说,当方法形参名和请求参数名不同时,可以通过该注解来创建映射,从而获取到参数值。

<!-- 请求路径参数名:user_name 和 id_ -->
<a th:href="@{/test2(user_name='admin',id_=1)}">控制器方法获取同名请求参数</a>
 @RequestMapping(value = "/test2")
 
 	//控制器方法形参名:username 和 id
    public String test2(@RequestParam("user_name") String id, @RequestParam("id_") String username){
    
    
        System.out.println("id="+id+",username="+username);
        return "target";
    }

这样就可以成功获取到 不同名参数 的数据

@RequestParam注解一共有三个属性:
一、value:指定为形参赋值的请求参数的参数名
二、required:设置是否必须传输此请求参数,默认值为true
(1)若设置为true时,则当前请求必须传输value所指定的请求参数,若没有传输该请求参数,且没有设置defaultValue属性,则页面报错400:Required String parameter ‘xxx’ is not present;
(2)若设置为false,则当前请求不是必须传输value所指定的请求参数,若没有传输,则注解所标识的形参的值为null
三、defaultValue:不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为""时,则使用默认值为形参赋值

四、@RequestHeader获取请求头数据

@RequestHeader是将请求头信息控制器方法的形参创建映射关系

@RequestMapping(value = "/test2")
    public String test2(@RequestParam("user_name") String id,
                        @RequestParam("id_") String username,
                        //请求头信息与形参创建属性
                        @RequestHeader("Host") String host
    ){
    
    
        System.out.println("id="+id+",username="+username+",Host:"+host);
        return "target";
    }

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

@RequestHeader注解同样有三个属性,效果与@RequestParam属性相同。

五、@CookieValue获取cookie中的数据

@CookieValue是将cookie数据控制器方法的形参创建映射关系

<a th:href="@{/test1}">点击创建session(cookie)</a><br>

<a th:href="@{/test2(user_name='admin',id_=1)}">通过session创建cookie并获取cookie中数据</a>
@Controller
public class contraller {
    
    
	 //第一个
	 @RequestMapping(value = {
    
    "/test1"})
	    public String test1(HttpServletRequest request){
    
    
	        //创建session(于是就有了cookie)
	        HttpSession session=request.getSession();
	        return "target";
	    }
     //第二个
	 @RequestMapping(value = "/test2")
	 	public String test2(@RequestParam("user_name") String id,
	                        @RequestParam("id_") String username,
	                        @RequestHeader("Host") String host,
	                        @CookieValue("JSESSIONID") String jsessionid
	    ) {
    
    
	    	System.out.println("id="+id+",username="+username+",Host:"+host+",JSESSIONID:"+jsessionid);
	        return "target";
	    }
}

下图按照次序依次点击:

在这里插入图片描述

点击第一个超链接之后点击第二个
我们在网页中按F12,查看请求头信息中出现了cookie
在这里插入图片描述
我们再次查看控制台:
在这里插入图片描述
数据获取成功!

六、通过POJO获取请求参数

可以在控制器方法的形参位置设置一个实体类类型的形参,此时若浏览器传输的 请求参数的参数名实体类中的属性名 一致,那么请求参数就会为此属性赋值

<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>
@RequestMapping("/testpojo")
public String testPOJO(User user){
    
    
    System.out.println(user);
    return "success";
}
//最终结果-->User{id=null, username='张三', password='123', age=23, sex='男', email='[email protected]'}

猜你喜欢

转载自blog.csdn.net/qq_47354826/article/details/121510186