从Spring4.3开始引进了`@GetMapping、@PostMapping、@PutMapping、@DeleteMappin,来帮助简化常用的HTTP方法的映射,并更好地表达被注解方法的语义。日常开发中,当决策具体的接口该使用哪个时不够清晰,于是深入挖掘一下他们之间的区别和联系。
先来了解一下@RequestMapping,在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求。
@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 {};
}
@RequestMapping 中的 method 主要用来定义接收浏览器发来的何种请求。在Spring中,使用枚举类org.springframework.web.bind.annotation.RequestMethod来定义浏览器请求的方式。
public enum RequestMethod {
GET,
HEAD,
POST,
PUT,
PATCH,
DELETE,
OPTIONS,
TRACE;
private RequestMethod() {
}
}
Http规范定义了多种请求资源的方式,最基本的有四种,分别为:GET(查)、POST(增)、PUT(改)、DELETE(删),而URL则用于定位网络上的资源相当于地址的作用,配合四种请求方式,可以实现对URL对应的资源的增删改查操作。在实际应用中,很多人并没有按照这个规范做,因为使用GET/POST同样可以完成PUT和DELETE操作,甚至GET也可以完成POST操作,因为GET不需要用到表单,而POST却需要通过表单来发送。具体的使用方式如下。
@RequiredPermission(AdminPermission.MERCHANT_EDIT)
@RequestMapping(value = "/create", name = "创建店铺",method = RequestMethod.POST)
public ModelAndView create(String merchant, String merchantAdmin) {
merchantService.create(parseModel(merchant, new Merchant()), parseModel(merchantAdmin, new MerchantAdmin()));
return feedback();
}
我们用@PostMapping来代替@RequestMapping
@PostMapping(value = "/create", name = "创建店铺")
public ModelAndView create(String merchant, String merchantAdmin) {
merchantService.create(parseModel(merchant, new Merchant()), parseModel(merchantAdmin, new MerchantAdmin()));
return feedback();
}
此时他们达到的效果是一致的,省去了书写method = RequestMethod.POST
所以该如何决策使用哪个时就看这次请求期望做到的事情
GET(SELECT):从服务器查询,可以在服务器通过请求的参数区分查询的方式。POST(CREATE):在服务器新建一个资源,调用insert操作。PUT(UPDATE):在服务器更新资源,调用update操作。DELETE(DELETE):从服务器删除资源,调用delete语句
然后使用对应的组合注解
@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP Get 映射到 特定的处理方法上。
@PostMapping 是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。该注解将HTTP Post 映射到 特定的处理方法上。
@PutMapping 是一个组合注解,是@RequestMapping(method = RequestMethod.PUT)的缩写。该注解将HTTP Put 映射到 特定的处理方法上。
@DeleteMapping 是一个组合注解,是@RequestMapping(method = RequestMethod.DELETE)的缩写。该注解将HTTP Delete 映射到 特定的处理方法上。



