@RequestMapping 的 method 属性挖掘

从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 映射到 特定的处理方法上。

PS:日常开发中最常用的是@GetMapping@PostMapping ,控制层接口方法需要接收封装参数时,请求方式应为@PostMapping,前端传参格式为不带任何包装的裸传,参数用&连接

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个问题是不完整的,因为缺少方法的定义和返回类型。在引用\[1\]中,@RequestMapping注解用于映射请求,其中value属性指定了请求的路径,比如"/user"。在引用\[2\]中,value属性为空字符串,表示该方法可以处理任意路径的请求。同时,@RequestMapping注解还可以使用method属性指定请求的方法类型,比如RequestMethod.POST和RequestMethod.DELETE。在引用\[3\]中,@RequestMapping注解的produces属性可以用来指定生产的数据格式,根据请求头中的Accept进行匹配。例如,produces = "application/json"表示生产json格式的数据,而produces = "application/xml"表示生产xml格式的数据。这样可以根据请求头中的Accept来匹配相应的数据格式。所以,@RequestMapping(value = "importCommissionList")这个注解只指定了请求的路径,但没有指定请求的方法类型和生产的数据格式。 #### 引用[.reference_title] - *1* *2* [@RequestMapping value值置为“](https://blog.csdn.net/sinat_32034679/article/details/122596255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [@RequestMapping(value = ““, produces = “application/json“)](https://blog.csdn.net/Dongguabai/article/details/112971595)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值