最近接触到若依这个框架,发现里面增删改的Controller层是这样写的:
剛看到的时候很诧异,为啥@PostMapping和@PutMapping都没添加value属性并赋值呢,前端发起请求是怎么区分这两个映射呢,难道是根据方法名生成了system/user/add和system/user/edit两个url(在我的理解里是不会有相同的两个url出现在controller里的,于是开启想象力),翻了一遍代码也没看到哪里做了处理,于是直接打开项目操作了一下用户新增和编辑,发现请求路径都是system/user。
为什么SpringMVC允许出现两个相同的url呢?这两个url只是http请求的方法不同,一个是post,一个是put,肯定底层在注册method的时候也跟http方法挂钩,debug一下果然如此(源码 RequestMappingInfoHandlerMapping.afterPropertiesSet()):
@RestController
@RequestMapping("/demo/http/method")
public class DemoRest {
@PostMapping
public ResultMessage add(@RequestBody User user) {
return ResultMessage.success(user);
}
@PutMapping
public ResultMessage put(@RequestBody User user) {
return ResultMessage.success(user);
}
}



