栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

@RequestMapping 的 method 属性挖掘

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/754023.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号