目录
1、@RequestParam 获取请求参数
2、@RequestHeader
3、@CookieValue
4、传入POJO - SpringMVC自动封装
5、传入原生API
之前是request.getParameter("xxxx")
- 变量名和参数名一模一样时,可以不用注解 ,自动赋值(默认方式)
@RequestMapping(value = "/handle01") public String handle01(String username){ System.out.println(username); return "success"; }
handle01:获取请求参数的值
使用@RequestParam来指定参数
@RequestMapping(value = "/handle01") public String handle01( @RequestParam("username")String name){ /*相当于 name=request.getParameter(username"")*/ System.out.println(name); return "success"; }
如果使用@RequestParam指定参数了,那么这个参数默认必须带,不带会显示400。
我们也可以通过设置它的属性来自定义。@RequestParam有这样几个属性:
@Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface RequestParam { @AliasFor("name") String value() default ""; @AliasFor("value") String name() default ""; boolean required() default true; String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n"; }
value:指定要获取的参数的key;
required:指定这个参数是否是必须的,默认true必须;
defaultValue:默认值,没带参数时指定的默认值。
可以获取请求头中摸个key的值,之前是request.getHeader("xxx")
和RequestParam使用方法一样。
@RequestMapping(value = "/handle01")
public String handle01( @RequestParam("username")String name,@RequestHeader("User-Agent") String userAgent){
/*相当于 name=request.getParameter(username"")*/
System.out.println(name);
System.out.println("请求头:"+ userAgent);
return "success";
}
获取某个cookie的值
以前获取某个cookie的操作:
Cookie[] cookies = request.getCookies
for(Cookie c : cookies){
if(c.getName().equals("JSESSIONID")){
c.getValue();
}
}
@RequestMapping(value = "/handle01")
public String handle01(@RequestParam("username")String name,
@RequestHeader("User-Agent") String userAgent,
@CookieValue("JSESSIONID")String jid){
/*相当于 name=request.getParameter(username"")*/
System.out.println(name);
System.out.println("请求头:"+ userAgent);
System.out.println("cookie的JSESSIONID是:"+jid);
return "success";
}
用法和上边一模一样
(1)如果我们的请求参数是一个POJO,Springmvc会自动的为POJO进行赋值:将POJO中的每一个属性,从request参数中尝试获取出来,并封装即可。这时要求参数和属性名一致,才可以自动封装赋值。
public class Student {
private String username;
private Integer age;
private String sex;
private String school;
...............
.....
}
@RequestMapping(value = "/student",method = RequestMethod.POST)
public String addStudent(Student student){
System.out.println(student);
return "success";
}
(2)还可以级联封装
也就是属性的属性也可以自动赋值。
可以传入这些原生API:
- HttpServletRequest
- HttpServletResponse
- HttpSession
- java.security.Principal :和https安全协议有关的
- Locale:国际化有关的的区域信息
- InputStream:ServletInputStream inputStream = request.getInputStream()
- OutputStream:ServletOutputStream outputStream = response.getOutputStream()
- Reader:BufferedReader reader = request.getReader()
- Writer:PrintWriter writer = response.getWriter()
这里以HttpServletRequest、HttpSession为例:
@RequestMapping(value = "/handle03")
public String handle03(HttpSession session, HttpServletRequest servletRequest){
servletRequest.setAttribute("reqParam","我是请求域中的");
session.setAttribute("sessionParam","我是Session域中的");
return "success";
}
Success
请求:${requestScope.reqParam}
session:${sessionScope.sessionParam}