SpringMVC第四阶段:Controller中如何接收请求参数
Controller中如何接收请求参数
1、原生API参数类型
1.1、HttpServletRequest类
只需要在Controller的目标方法中, 直接写上HttpServletRequest对象即可获取 原生API的 request对象实例。
@RequestMapping(value = "/p1")
public String param1(HttpServletRequest request){System.out.println(" httpServletRequest对象 : " + request);System.out.println("获取请求的参数: " + request.getParameter("username"));System.out.println("获取工程路径: " + request.getContextPath());System.out.println("获取请求资源路径: " + request.getRequestURI());return "ok";
}
1.2、HttpSession类 和HttpServletResponse类
@RequestMapping(value = "/p2")
public String param2(HttpSession session , HttpServletResponse response){System.out.println(" 会话id: " + session.getId());System.out.println(" 是否是新创建的: " + session.isNew() );System.out.println( "response对象" + response );return "ok";
}
以上这几个原生API 只需要在Controller 控制器的方法上直接写参数就可以获取,使用跟原来一样.
2、普通类型入参
/*** 在SpringMVC框架中,如果要获取请求的参数,只需要把参数直接写在Controller的方法上即可.<br/>* 注意点: <br/>* 1 参数的类型要一致 <br/>* 2 参数名要一致! <br>*/
@RequestMapping(value = "/p3")
public String param3(String username,Integer age,String password){System.out.println("请求参数 username 的值是: " + username);System.out.println("年龄 : " + age);System.out.println("密码 : " + password);return "ok";
}
3、普通类型数组的参数
/*** 如果要使用SpringMVC获取多个参数值的时候,只需要直接写成数组即可!!! <br/>* 注意点: <br/>* 1 参数的类型要一致 <br/>* 2 参数名要一致! <br>*/
@RequestMapping(value = "/p4")
public String param4(String[] hobby){System.out.println("兴趣爱好: " + Arrays.asList(hobby));System.out.println("爱好1 : " + hobby[0]);System.out.println("爱好2 : " + hobby[1]);return "ok";
}
4、普通类型使用@RequestParam入参
示例代码:
/*** 客户端的参数名是username, 服务器参数名是user. 是否可以取值.<br/>* @RequestParam(name = "username") String user <br/>* 表示把请求参数 username 的值,赋给方法参数 user <br/>** 如果没有传递就会报错. <br/>* required = false 表示客户端不传递不报错.值为null <br/>* defaultValue 表示默认值 <br/>* @param user* @return*/
@RequestMapping(value = "/p5")
public String param5(@RequestParam(name = "username",required = false,defaultValue = "哟!!") String user){System.out.println("user的值是: " + user);return "ok";
}
如果指定的参数客户端 不传递 , 就会报以下错误。
5、@RequestHeader获取请求头入参
@RequestParam注解是获取指定请求参数的值注入到Controller方法参数中
@ReqeustHeader 注解是将指定请求头的值注入到Controller方法参数中
@RequestParam和@ReqeustHeader 注解的使用规则一样
@RequestMapping(value = "/p6")
public String param6(@RequestHeader(name="User-Agent") String userAgent,@RequestHeader(name="Connection")String connection ){System.out.println("请求头 userAgent 的值是: " + userAgent);System.out.println("请求头 connection 的值是: " + connection);return "ok";
}
6、@CookieValue获取Cookie值入参
@CookieValue注解和@RequestParam注解和@ReqeustHeader 注解使用规则完全一样.
把请求的Cookie的值注入到Controller方法参数中
@RequestMapping(value = "/p7")
public String param7(@CookieValue(name = "JSESSIONID") String jSessionId){System.out.println("Cookie jSessionId 的值是: " + jSessionId);return "ok";
}
@CookieValue注解:获取Cookie值注入方法参数
@RequestParam注解:获取客户端参数值注入方法参数
@ReqeustHeader 注解 :获取请求头注入方法参数
7、Pojo对象类型的参数
只需要注意请求的参数名要和JavaBean的属性名一致即可
表单:
<%--斜杠表示绝对路径.如果是浏览器解析 , 得到的路径是: http://ip:port/ <br/>如果是服务器解析 , 得到的路径是: http://ip:port/工程路径/
--%>
<form action="${pageContext.request.contextPath}/addperson" method="get">编号: <input id="id" name="id" /> <br>名称: <input id="name" name="name" /> <br>年龄: <input id="age" name="age" /> <br>电话: <input id="phone" name="phone" /> <br><input type="submit" value="提交" />
</form>
JavaBean对象:
public class Person {private Integer id;private String name;private Integer age;private String phone;}
Controller中的代码:
/*** 请求的参数名要和javaBean的属性名一致!!!*/
@RequestMapping(value = "/addperson")
public String person(Person person){System.out.println("用户信息保存 ==>>> " + person);return "ok";
}
8、对象中套对象(级联属性)
表单:
<%--斜杠表示绝对路径.如果是浏览器解析 , 得到的路径是: http://ip:port/ <br/>如果是服务器解析 , 得到的路径是: http://ip:port/工程路径/
--%>
<form action="${pageContext.request.contextPath}/addperson" method="get">编号: <input id="id" name="id" /> <br>名称: <input id="name" name="name" /> <br>年龄: <input id="age" name="age" /> <br>电话: <input id="phone" name="phone" /> <br><%--使用级联属性赋值--%>车名: <input id="car.name" name="car.name" /> <br>车牌: <input id="car.carNo" name="car.carNo" /> <br><input type="submit" value="提交" />
</form>
JavaBean代码 :
public class Car {private String name;private String carNo;
}
public class Person {private Integer id;private String name;private Integer age;private String phone;private Car car;
}