一. RequestParam注解
我们之前在使用Servlet的时候,会传递多个参数,使用request.getParameter(参数名)的方式在Servlet中接收请求参数,那么SpringMVC有这么麻烦吗?肯定是没有的,SpringMVC为参数的获取进行了封装,使得获得请求参数非常简便。
/**
* 在请求处理器的目标方法中,通过入参就可以获取请求参数的信息
* - 约定:目标方法入参参数名和 请求参数名称一致,就会自动匹配
* - 指定方式:使用@ReuqestParam注解指定匹配的请求参数名称
* 此种情况下,如果没有对应的指定的请求参数,则会报错,
* - 我们可以使用required=false属性表示参数非必须,如果获取不到非必须的参数,会设置为null
* - defaultValue 表示设置默认值
* 在required=false 情况下,如果参数没有传递,会赋值为null 但是基本数据类型不能为null,所以在开发中,我们一般使用对应的包装类来接收参数,比如Integer 可以为 null 而 int 不能为null
* 大家也可以发现,我们的SpringMVC会将请求参数自动的进行类型转换:
* String --- > Integer
* 这是因为SpringMVC已经定义好了很多的类型转换器,能够对常见的类型进行转换。
*
* @param name
* @param age
* @return
*/
@RequestMapping("testParam")
public String testParam(@RequestParam(value="name",required=false) String username,@RequestParam(value="age",required=false) Integer userage) {
System.out.println("name:" + username + ",age:" + userage);
System.out.println("testParam...");
return SUCCESS;
}
二. RequestHeader注解
@RequestHeader注解用来获取请求头信息
/**
* 和 @RequestParam 获取请求参数一样,使用@RequestHeader可以获取请求头信息
* @param connection
* @return
*/
@RequestMapping("testRequestHeader")
public String testRequestHeader(@RequestHeader(value="Connection") String connection) {
System.out.println("testRequestHeader..."+connection);
return SUCCESS;
}
三. CookieValue注解
使用@CookieValue可以获取Cookie信息
/**
* @CookieValue 用来获取cookie 的值
* - value = "cookie名称"
* Object value 对应的Cookie名称的值赋值的变量作为处理器目标方法的入参
* @param value
* @return
*/
@RequestMapping("testCookie")
public String testCookie(@CookieValue("JSESSIONID") Object value) {
System.out.println(value.toString());
return SUCCESS;
}
四. 使用实体类对象作为参数
/**
* 对于新增或修改时,表单传递的参数很多,实际上都能够对应到实体类的属性,对于接收表单参数
* - request.getParameter() : 原生开发使用
* - @RequestParam注解 : 之前讲解的SpringMVC接收参数
* 以上两种做法在表单提交的参数数量较多的情况下,不适用,最终的解决方案
* - 使用实体类作为处理器目标方法的入参:SpringMVC会将对应实体类JavaBean风格属性名的参数自动的封装到实体类的属性上
*
* @param stuName
* @param stuGender
* @param stuAge
* @return
*/
@RequestMapping("testRequestPOJO")
public String testRequestPOJO(Student student) {
System.out.println(student);
return SUCCESS;
}
五. 将ServeltAPI作为入参
ServletAPI在SpringMVC开发中,使用较少,当然也有特殊情况会使用到,比如在Handler中域对象信息。
/**
* 获取ServletAPI 只需要在处理器的目标方法入参直接声明所需要获取的对象即可
* @param request
* @param response
* @param session
* @return
*/
@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request,HttpServletResponse response,HttpSession session) {
System.out.println(session.getId());
return SUCCESS;
}