Spring之@RequestMapping、@GetMapping、 @PostMapping 三者的区别
创始人
2024-03-12 22:07:42

我的理解:其实@RequestMapping、@GetMapping、 @PostMapping 三者就是父类和子类的区别,RequestMapping是父类,@GetMapping、 @PostMapping为子类集成了RequestMapping更明确了http请求的类型
分析三者的源码:

  1. RequestMapping .class:
@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 源码可知@RequestMapping 可以同时作用的地方有方法和类(@Target({ElementType.TYPE, ElementType.METHOD}))如(可以在方法上添加@RequestMapping(method = RequestMethod.POST)@RequestMapping(method = RequestMethod.GEt)表示是get还是post请求 ),除了name一个参数是字符串 , 其他的参数都是数组,说明其他参数都可以是多值。那么一个函数是不是可有多个接口地址请求呢?
举个例子同个方法是否支持两个不同url请求:
(1)http://localhost:8000/login/pww
(2)http://localhost:8000/login/pww1

 /*** 表单形式请求数据* .* @param id* @return*/@ResponseBody@PostMapping(value = {"pww","pww1"})public Map loginById(@RequestParam(name = "id") Integer id){Map map = new HashMap() ;switch (id){case 0:map.put("msg","你是邱工么");break;case 1:map.put("msg","你真的是邱工么");break;case 2:map.put("msg","是的  我是邱工");break;case 3:map.put("msg","hello! 邱工");break;case 4:map.put("msg","邱工哈哈");break;case 5:map.put("msg","邱工呵呵");break;default:{map.put("msg","邱工是个女的!");break;}}return map ;}

在这里插入图片描述在这里插入图片描述结果证明是可行的。

  1. GetMapping.class:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = {RequestMethod.GET}
)
public @interface GetMapping {@AliasFor(annotation = RequestMapping.class)String name() default "";@AliasFor(annotation = RequestMapping.class)String[] value() default {};@AliasFor(annotation = RequestMapping.class)String[] path() default {};@AliasFor(annotation = RequestMapping.class)String[] params() default {};@AliasFor(annotation = RequestMapping.class)String[] headers() default {};@AliasFor(annotation = RequestMapping.class)String[] consumes() default {};@AliasFor(annotation = RequestMapping.class)String[] produces() default {};
}
  1. PostMapping .class:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = {RequestMethod.POST}
)
public @interface PostMapping {@AliasFor(annotation = RequestMapping.class)String name() default "";@AliasFor(annotation = RequestMapping.class)String[] value() default {};@AliasFor(annotation = RequestMapping.class)String[] path() default {};@AliasFor(annotation = RequestMapping.class)String[] params() default {};@AliasFor(annotation = RequestMapping.class)String[] headers() default {};@AliasFor(annotation = RequestMapping.class)String[] consumes() default {};@AliasFor(annotation = RequestMapping.class)String[] produces() default {};
}

那么最后有源码分析得出GetMapping 和PostMapping就是 RequestMapping已经指定请求方式的简写版

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...