1.@RequestParam
1.作用在方法传递的参数前,用于接收所传参数(是springmvc中接受普通参数的注解)
2.属性 :value 请求参数中的名称
required:请求参数中是否提供此参数,默认为true
defaultValue:指定参数的默认值
 @RequestMapping("/user")
 @Controller
 public class QuickController {
     @RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam("username")String username,@RequestParam(value = "age",required = false,defaultValue = "0")Integer age){
        System.out.println(username +",,," + age);
        return "index";
    }
 } <form action="user/testRequestParam" method="post">
      姓名:<input type="text" name="username"><br>
      年龄:<input type="text" name="age"><br>
      <input type="submit" value="testRequestParam">
  </form>输入姓名和年龄 控制台会得到所输入的姓名和年龄
 
 
 
 
2.@Controller
1.@Controller用于标记一个类,使用它标记的类就是一个springmvc Controller对象,即一个控 制器类 。Spring使用扫描机制查找所有基于注解的控制器类。它通常是和基于注解@RequestMapping的方法结合使用的。
2.该注解有个默认方法,返回类型为String类型 value的默认值为空
package org.springframework.stereotype;
@java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE})
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Documented
@org.springframework.stereotype.Component
public @interface Controller {
    @org.springframework.core.annotation.AliasFor(annotation = org.springframework.stereotype.Component.class)
    java.lang.String value() default "";
}3.@RequestMapping
1.在springmvc中使用@RequestMapping来映射请求,也是通过它来指定控制器可以处理哪些URL请求。相当servlet中在web.xml的配置
2.@RequestMapping有六个属性,一般在项目中常用的有三个属性:value,method,produces
value:指定请求的实际地址
method:指定类型的请求,主要有GET,POST,PUT,DELETE,默认为GET
produces:指定返回内容类型 produces="application/json;charset=UTF-8"
@RequestMapping(value = "/user",produces="application/json;charset=UTF-8")
@Controller
public class QuickController {
     @RequestMapping(value = "/testPost",method = RequestMethod.POST)
    public String testPost(){
        System.out.println("quickMethod running.....");
        return "index";
    }
}<form action="user/testPost" method="post">
  <input type="submit" value="testPost">
</form>4.@SessionAttributes
1.可以让参数在多个请求间共享,配置需要在session中存放数据范围,@SessionAttributes只能使用在类定义上。
2.
@SessionAttributes(value = {"user"},types = {String.class})会将model中属性名为user以及类型为String的属性添加到会话中。
@SessionAttributes(value = {"user"},types = {String.class})
@RequestMapping("/user")
@Controller
public class QuickController {
    @RequestMapping("/testSessionAttribute")
   public String testSessionAttribute(Map<String,Object> map){
        User user = new User();
        user.setName("LBJ");
        user.setAge(37);
       Car car = new Car();
       car.setKind("aodi");
       user.setCar(car);
       map.put("user",user);
       map.put("a","wc");
       map.put("inter",new Integer(12));
       return "index";
   }
}
<a href="user/testSessionAttribute">testSessionAttribute</a>request:${requestScope.user};${requestScope.a};${requestScope.inter}
<br>
session:${sessionScope.user};${sessionScope.a};${sessionScope.inter}很明显 session没有拿到12这个值
 
 
5.@ModelAttribute
1.@ModelAttribute可以用于修饰方法和参数
用在方法上:被@ModelAttribute注释的方法会在此controller的每个方法执行前执行,可以修饰没有返回值的方法,也可修饰有具体返回值的方法。
用在参数上:会将客户端传递来的参数按名称注入到指定对象中
应用场景:当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
@RequestMapping("/user")
@Controller
public class QuickController {
    @RequestMapping("/testModuleAttribute")
    public String testModuleAttribute(User user){
        System.out.println(user);
        return "index";
   }<form action="user/testModuleAttribute" method="post">
    <input type="text" name="name">
    <input type="submit" value="testModuleAttribute">
  </form>此时我们只能得到名字

当我们加上@ModelAttribute
 @ModelAttribute
    public void test(Map<String,User> map){
        System.out.println("1111");
        User user = new User();
        user.setName("Gurry");
        user.setAge(31);
        map.put("user",user);
   }输入名字的同时 可以得到名字和年龄
 
 
6.@PathVariable
   1.通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中:URL中的{xxx}占位符可以通过@PathVariable("xxx")绑定到方法入参中
 
2.@PathVariable可以接收多个参数但是无法接收对象
@RequestMapping("/user")
@Controller
public class QuickController {
     @RequestMapping(value = "/testPathVariable/{id}")
    public String testPathVariable(@PathVariable("id") Integer id){
        System.out.println("testPathVariable running....." + id);
        return "index";
    }
}
<a href="user/testPathVariable/12">testPathVariable</a> 
7.@ResponseBody
1.@ResponseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入response对象的body区,通常返回JSON数据或者XML数据,使用此注解不会再走视图处理器。
不加@ResponseBody注解 返回字符串需要response.getWriter.write();
 @RequestMapping("/testString")
    public void testString(HttpServletResponse response){
        try {
            response.getWriter().print("hello");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }加入@ResponseBody注解之后
 @RequestMapping("/testResponsebody")
    @ResponseBody
    public String testResponsebody(){
       return "abcdefg";
    }8.@RequestHeader
1.@RequestHeader注解用于获取请求消息头
2.属性 value:提供消息头名称 参数值为String类型
required : 是否必须有消息头,默认值为true
defaultValue:请求头变量绑定失败时的默认值
 @RequestMapping("/testHead")
    public String testHead(@RequestHeader(value = "Accept") String myHeader){
        System.out.println("testHead");
        System.out.println(myHeader);
        return "index";
    }
 <a href="user/testHead">testHead</a>部署成功,控制台获取了请求头的值
 
 










