@RequestMapping與@GetMapping和@PostMapping等新注釋

@RequestMapping與@GetMapping和@PostMapping等新注釋

Spring的復(fù)雜性不是來自于它處理的對象,而是來自于自身,不斷演進發(fā)展的Spring會帶來時間維度上復(fù)雜性,比如SpringMVC以前版本的@RequestMapping,到了新版本被下面新注釋替代,相當于增加的選項:

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
從命名約定我們可以看到每個注釋都是為了處理各自的傳入請求方法類型,即@GetMapping用于處理請求方法的GET類型,@ PostMapping用于處理請求方法的POST類型等。

如果我們想使用傳統(tǒng)的@RequestMapping注釋實現(xiàn)URL處理程序,那么它應(yīng)該是這樣的:

@RequestMapping(value = "/get/{id}", method = RequestMethod.GET)

新方法可以簡化為:

@GetMapping("/get/{id}")

如何工作?
  所有上述注釋都已在內(nèi)部注釋了@RequestMapping以及方法元素中的相應(yīng)值。

例如,如果我們查看@GetMapping注釋的源代碼,我們可以看到它已經(jīng)通過以下方式使用RequestMethod.GET進行了注釋:

@Target({ java.lang.annotation.ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = { RequestMethod.GET })
public @interface GetMapping {
// abstract codes
}
所有其他注釋都以相同的方式創(chuàng)建,即@PostMapping使用RequestMethod.POST進行注釋,@ PutMapping使用RequestMethod.PUT進行注釋等。

使用方式
下面是結(jié)合RestController的簡單使用:

@RestController
@RequestMapping("users")
public class UserController {
@Autowired
UserService userService;

@GetMapping("/status/check")
public String status()
{
return "working";
}

@GetMapping("/{id}")
public String getUser(@PathVariable String id)
{

  return "HTTP Get was called";

}

@PostMapping
public String createUser(@RequestBody UserDetailsRequestModel requestUserDetails)
{
return "HTTP POST was called";
}

@DeleteMapping("/{userId}")
public String deleteUser(@PathVariable String userId)
{

  return "HTTP DELETE was called";

}

@PutMapping("/{userId}")
public String updateUser(@PathVariable String userId, @RequestBody UserDetailsRequestModel requestUserDetails)
{

  return "HTTP PUT was called";

}

}
下面是使用@Controller的代碼:

@Controller
public class HomeController
{
@GetMapping("/")
public String homeInit(Model model) {
return "home";
}
}
在上面的代碼中,HomeController類充當請求控制器。它的homeInit()方法將處理所有傳入的URI請求"/"。它接受a Model并返回視圖名稱home。使用配置的視圖解析器解析視圖名稱”home“的頁面。

寫法對比
@RequestMapping:

@RequestMapping(value = "/workflow",
produces = {"application/json"},
consumes = {"application/json"},
method = RequestMethod.POST)

@PostMapping如下:

@PostMapping(path = "/members", consumes = "application/json", produces = "application/json")
public void addMember(@RequestBody Member member) {
//code
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、不安全的隨機數(shù)生成,在CSRF TOKEN生成、password reset token生成等,會造成toke...
    nightmare丿閱讀 3,991評論 0 1
  • controller層在MVC設(shè)計中屬于控制層;設(shè)計初衷:接受請求并響應(yīng)請求;所以,該層盡量輕薄,避免編寫涉及業(yè)務(wù)...
    IT職業(yè)與自媒體思考閱讀 771評論 0 0
  • 轉(zhuǎn)自:【Guide哥】 0.前言 可以毫不夸張地說,這篇文章介紹的 Spring/SpringBoot 常用注解基...
    狼爺?shù)奶?/span>閱讀 395評論 0 2
  • 表情是什么,我認為表情就是表現(xiàn)出來的情緒。表情可以傳達很多信息。高興了當然就笑了,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,497評論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險厭惡者,不喜歡去冒險,但是人生放棄了冒險,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 7,644評論 0 4

友情鏈接更多精彩內(nèi)容