SpringMvc中常用到的注解

SpringMvc对于开发的小伙伴真的在熟悉不过了,今天总结一下SpringMvc中开发经常用到的注解。

@Controller
该注解使用在类上,表示该类是一个控制器类。Spring扫描器会扫描所有的控制器
类,并在控制器类中查找是否有注解@RequestMapping注解的方法。
标注@RequestMapping注解的方法就是请求的处理器。
补充:
要使用@Controller要在配置文件中开启包扫描
<context:component-scan base-package="com.offcn.controller"/>
只有在com.offcn.controller包(子包)下的类才可以扫描到注解@Controller
--------------------------------------------------------------------
@Controller @Service @Repository @Component 这几个注解使用效果是一样的
但是在mvc中使用对应名字的注解会做到见名知意

===================================================

@RequestMapping
这个注解可以说是用的非常非常的多,表示映射一个请求。它可以使用在方法上,
也可以使用在类上(表示映射的一部分)
@RequestMapping("/add")
public String add(){
}
浏览器访问:http://localhost:8080/add

@Controller
@RequestMapping("/user")
public class User{
@RequestMapping("/add")
}
浏览器访问:http://localhost:8080/user/add

查看@RequestMapping注解

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
    String name() default "";

    @AliasFor("path")
    String[] value() default {};

    @AliasFor("value")
    String[] path() default {};

    RequestMethod[] method() default {};

    String[] params() default {};

    String[] headers() default {};

    String[] consumes() default {};

    String[] produces() default {};
}

@RequestMapping常用的属性(常用)

1.value  //代表请求的映射,一个处理器可以有多个请求映射
   @RequestMapping(value={"/look","/see"})
   此时可以通过后缀look或者see都可以访问到该处理器
   注:只有唯一的属性时value可以省略不写
   @RequestMapping("/add") <==> @RequestMapping(value = "/add") 

2.method //该属性可以用来限制接收请求的方式
   @RequestMapping(method = RequestMethod.GET) //仅接受get请求
   @RequestMapping(method = {RequestMethod.GET,RequestMethod.POST}) //可以处理get和post请求:如果不写的话表示可以接受任何方式的http请求
  
3.params  //请求路径中必须(不)包含参数才处理
  "name" //必须携带name参数
  "name=lisi" //必须携带参数name并且为lisi
  "!name"  //不能携带参数name
  "name != lisi" //携带name的值不能为lisi(也可以不携带name参数)
  -----
  HTTP Status 400 - Parameter conditions "name=lisi, !age" not met for actual request parameters: name={lisi}, age={}
    @RequestMapping(value = "/look",params = {"name=lisi","!age"})
    public String get(){}
    浏览器访问路径:http://localhost:8080/look?name=lisi  //不能在后边加上&age

===================================================

@RequestParam 
该注解可以用来将请求参数赋值给方法的形参(如果请求参数与方法形参一致
可以省略,也可以完成赋值。)
在不使用该注解的前提下:如果请求参数和方法形参一致,可以完成赋值!
但是如果请求中没有该参数或者参数名称不一致,会报500

@RequestParam常用参数

1.name//请求参数绑定的名称
2.value //请求参数绑定的别名(通过名称和别名都可以进行访问)
3.required //是否是必须要携带的参数boolean类型
4.defaultValue  //默认值,如果当没有绑定参数的时候,使用默认值
示例:
@RequestMapping("/look")
public String look(@RequestParam(name="age",required=false,defaultValue="23") int age){
  System.out.println(age);
}
浏览器访问:http://localhost:8080/look?age=34
此时@RequestParam已经指定默认值为23(并且指定可以不携带该参数)就表明我们在使用的时候请求中可以不包含age参数。

===================================================

@PathVariable
该注解用在方法的形参上,可以获取请求中的动态参数(将请求中的占位符内容
赋值给方法的形参上)
//该注解参数比较简单,一个默认的value

    @RequestMapping("/look4/{id}")
    public String look4(@PathVariable("id") int age){
        System.out.println(age);
        return "success";
    }:{...}是一个占位符,@PathVariable中的value要和占位符的名称一致
    
    浏览器访问:http://localhost:8080/look4/23
    控制台会打印:23

===================================================

@RequestHeader
该注解用在方法的形参中,用于获取请求协议中指定头的值

在这里插入图片描述

注:该注解中的参数和@RequestParam中的参数一致。如果不指定required=false
那么name或value的值一定要是requestHeader中有的参数名称(上图红框)
   
    @RequestMapping("/look6")
    //获取请求头中名称为Connection的值,并将其赋值给参数con
    public String look6(@RequestHeader(name="Connection") String con){
        System.out.println(con);
        return "success";
    }
    
    浏览器访问:http://localhost:8080/look6
    控制台打印:keep-alive

===================================================

@CookieValue
该注解可以用来获取执行Cookie的值
比较一下传统获取Cookie值的方法,和使用注解的方式(JSESSESIONID为例)
一、传统方法获取执行Cookie值

    @RequestMapping("/look9")
    public String look9(HttpServletRequest request){
        Cookie[] cookies = request.getCookies();
        String js = "";
        for (Cookie cookie : cookies) {
            if("JSESSIONID".equals(cookie.getName())){
                js = cookie.getValue();
            }
        }
        System.out.println("传统方法获取JSEESIONID的值"+js);
        return "success";
    }
二、使用注解的方式获取Cookie的值
     @RequestMapping("/look8")
    public String look8(@CookieValue(name="JSESSIONID") String js){
        System.out.println("使用注解方式获取JSESSIONID的值"+js);
        return "success";
    }

浏览器分别访问:
     http://localhost:8080/look8
     http://localhost:8080/look9
控制台打印:
      使用注解方式获取JSESSIONID的值C9C328B62EFBFDADEBA6134B517D1D7D
      传统方法获取JSEESIONID的值C9C328B62EFBFDADEBA6134B517D1D7D
从上述的示例中我们可以看到使用注解的方式获取指定Cookie的值变得
多么的简单!
其中我们还可以为其指定参数required/defaultValue等。就是表明我们可以为
其指定默认值。

===================================================

@RequestBody
该注解用在方法的形参中,将json格式的对象映射到指定的实体类中
@RequestMapping("/look9")
public String look9(RequestBody Person person){
return "success";
}
该注解经常用在前后端分离时,前端返给后台的都是json对象。

===================================================

@ResponseBody
返回Json格式的字符串
数据模拟:
    @RequestMapping("/look10")
    @ResponseBody
    public String look10(){
        String s = "{\"name\":\"lisi\",\"age\":12}";
        return s;
    }
 浏览器访问:http://localhost:8080/look10

在这里插入图片描述

补充:在实际开发中我们后端一般都是直接返回的是JSON,所以可以简写:
@RestController  <==> @Controller和@ResponseBody
只要在类上打上@RestController表示该类是一个控制器类并且该类中的所有方法
都返回json对象

===================================================

@SessionAttributes
该注解可以将model中指定的属性保存在httpsession对象中。
注:该注解只能使用在类上!
参数:
1.name  /*String[] 是一个String类型的数组,表示Model的属性名称,也是
                   httpSession中属性的名称*/
2.value  //属性的别名
3.types  //该属性的类型 Class<?>[]

代码演示:

@RestController
@SessionAttributes(names = "user") //将model中属性名为user的属性放入session域中
public class MyTestController {

    @RequestMapping("/see")
    public String see(Model model){
        model.addAttribute("user","青瓜与孤独");
        return "success";
    }

    @RequestMapping("/see2")
    public String see2(HttpSession session,HttpServletRequest request){
        System.out.println(request.getSession().getAttribute("user"));
        System.out.println(session.getAttribute("user"));
        return "success";
    }
    }
    先在浏览器中访问:http://localhost:8080/see将数据绑定在httpSession
    对象中在访问http://localhost:8080/see2 成功从httpSession对象中获取
    需要的属性

==================================================

@ModelAttribute
表示该注解是一个公共方法,在执行其他方法之前会执行该方法。同时会返回value
key为name指定的值,将值存放在request域中。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值