SpringMVC(四):RequestMapping

现在我们来学习一下RequestMapping注解。

RequestMapping注解用来将url映射到一个控制类(Controller类)或一个特定处理的方法上。

一、RequestMapping使用的位置

1.方法上

直接上实例:

package com.jms.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MainController {

    @RequestMapping("/t1")
    public String test1(Model model) {
        model.addAttribute("message", "test1");
        return "main";
    }
}

 

 此时直接访问类上注解的地址即可发起请求。

2.类上

使用在类上时不能仅仅使用在类上,还需要同时使用在方法上。

使用在类上相当于给使用RequestMapping注解的方法添加了一个父关系,也就说在实际请求时需要将类注解的url和方法注解的地址拼接起来,看下面的例子:

package com.jms.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/m1")
public class MainController {

    @RequestMapping("/t1")
    public String test1(Model model) {
        model.addAttribute("message", "test1");
        return "main";
    }
}

此时在类和方法上都有注解,我们访问一下:

 

 此时我们需要访问类注解和方法注解拼接起来的路径才能够发起请求。

一般来说直接在方法上写死即可,无需在类上进行RequestMapping注解的使用。

二、RequestMapping注解的属性

我们来看一下RequestMapping注解的源码:

@Target({ElementType.TYPE, ElementType.METHOD})
@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 {};

}
    

1.name属性:这个属性相当于方法的注释,使方法更容易理解。

2.value属性:指定请求的实际地址,指定的地址可以是URI 模板模式(Template Pattern),这里用的是数组,说明可以有多个值;value属性是RequestMapping注解的默认属性,我们所写的@RequestMapping("/t1")实际上就是@RequestMapping(value = "/t1")。

3.path属性:有源码中可见,path与value互为别名,也就是说它和value属性的作用是相同的。

4.method属性:指定请求的类型,我们看一下RequestMethod的源码如下:

 

 由此我们衍生出来了一些新的注解,如

    @GetMapping

    @PostMapping

    @PutMapping

    @PatchMapping

    @DeleteMapping

@GetMapping("/t1")就等价于@RequestMapping(value="/t1", method=RequestMethod.GET)。

 

(本文仅作个人学习记录用,如有纰漏敬请指正)

posted @ 2022-10-17 18:11  谁知道水烫不烫  阅读(191)  评论(0编辑  收藏  举报