現在我們來學習一下RequestMapping註解。 RequestMapping註解用來將url映射到一個控制類(Controller類)或一個特定處理的方法上。 一、RequestMapping使用的位置 1.方法上 直接上實例: package com.jms.controller; impo ...
現在我們來學習一下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)。
(本文僅作個人學習記錄用,如有紕漏敬請指正)