SpringMVC常用注解

1.@RequestParam

  1)作用:把请求中指定名称的参数给控制器中的形参赋值

  2)属性:value(name):请求参数中的名称

     required:请求参数中是否必须提供此参数,默认值:true,表示必须提供该参数,若不提供,将会报错

      @RequestMapping("/testRequestParam")
      public String testRequestParam(@RequestParam(value="name") String username){
          System.out.println(username);
          return "success";
      }
      访问该方法时,请求中的参数名称必须为"name",不传或者传其他参数名的参数将会报错
      访问示例:localhost:8080/testRequestParam?name=Kavins(参数必须存在且参数名为name)
2.@RequestBody
  1)作用:用于获取请求体内容,直接使用得到的是key=value&key=value...结构的数据,get请求方式不适用
  2)属性:required:是否必须有请求体,默认值是true,当取值为true时,get请求方式会报错,如果值为false,get请求得到的是null
       @RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String body){
        System.out.println(body);
        return "success";
    }        
    
    如图提交post请求
   方法中的参数body获取的为post请求的整个请求体(姓名+年龄),而不是指其中的一个参数
   后台打印结果为:username=Kavins&age=18
3.@PathVaribale
1)作用:用于绑定url中的占位符,例如:请求url中/delete/{id},{id}就是url占位符,url支持占位符是spring3.0之后加入的,是SpringMVC支持rest风格url的一个重要标志
 2)属性:value:用于指定url中占位符名称
     required:是否必须提供占位符,默认为true
    @RequestMapping("/testPathVariable/{sid}")
    public String testPathVariable(@PathVariable(value="sid") String id){
        System.out.println(id);
        return "success";
    }
    访问示例:http://localhost:8080/springmvc/anno/testPathVariable/100
    后台将会打印100
4.@RequestHeader
  1)作用:用于获取请求消息头
  2)属性:value:提供消息头名称
      required:是否必须有此消息头,默认值为true
    @RequestMapping("/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value="Accept") String header){
        System.out.println(header);
        return "success";
    }
    打印结果:text/html, application/xhtml+xml, image/jxr, */*
5.@ModelAttribute
  1)作用:该注解是SpringMVC4.3版本以后新加入的,他可以用来修饰方法和参数
      修饰方法:表示当前方法会在控制器的方法之前先执行,他可以修饰没有返回值的方法,也可以修饰有具体返回值的方法.
      参数:获取指定的数据给参数赋值
  2)属性:value:用于获取数据的key,key可以使POJO类的属性名称,也可以是map结构的key
  修饰有返回值方法

    @RequestMapping("/testModelAttribute")
    public String testModelAttribute(User user){
        System.out.println("testModelAttribute执行了");
        System.out.println(user);
        return "success";
    }

    /**
     * 该方法会先执行(有返回值),返回值会传给控制器方法的user参数
     */
    @ModelAttribute
    public User showUser(String username,Integer age){
        System.out.println("showUser执行了...");
        //通过用户查询数据库(模拟)
        User user = new User();
        user.setUsername(username);
        user.setAge(age);
        user.setDate(new Date());
        return user;
    }

    点击提交后台打印:

        showUser执行了...
     testModelAttribute执行了
     User{username='Kavins', age=18, date=Sat Feb 15 19:15:34 CST 2020}

     //修饰没有返回值的方法:
     @RequestMapping("/testModelAttribute")
     public String testModelAttribute(@ModelAttribute("userMap") User user){
        System.out.println("testModelAttribute执行了");
        System.out.println(user);
        return "success";
    }
     //该方法会先执行(没有返回值,将user封装在了key值为userMap的map中,在控制器方法的参数中使用@ModelAttribute("userMap")得到user对象)
    @ModelAttribute
    public void showUser(String username,Integer age,Map<String,User> map){
        System.out.println("showUser执行了...");
        //通过用户查询数据库(模拟)
        User user = new User();
        user.setUsername(username);
        user.setAge(age);
        user.setDate(new Date());
        map.put("userMap",user);
    }
      打印结果:

        showUser执行了...
         testModelAttribute执行了
         User{username='Kavins', age=18, date=Sat Feb 15 19:20:02 CST 2020}

    

 
 

    

 


 

原文地址:https://www.cnblogs.com/kavins/p/12315757.html