springMVC的一个controller方法怎么处理多个请求地址
来源:互联网 发布:ue编辑器 mac版 编辑:程序博客网 时间:2024/05/16 10:26
写这篇博客的想法是前一阵子在csdn的问答中遇到有人问这个问题(传送门:http://ask.csdn.net/questions/382662),当时我也很懵逼,因为确实没有具体研究过,所以趁这次机会记录一下,如果有什么不对滴,请大家多多斧正,始めましょう。。。
先放代码
/** * Created by xyc on 2017/5/14 0014. */@Controller@RequestMapping("/path")public class PathController { /** * 测试发现/methodA/{param1}/{param2}可以通过,/methodA/{param1}则报错 * @param param1 * @param param2 * @return */ @ResponseBody @GetMapping(value={"/methodA/{param1}","/methodA/{param1}/{param2}"}) public String methodA(@PathVariable("param1") Integer param1,@PathVariable("param2") Integer param2){ return "methodA success:param1="+param1+",param2="+param2; } /** * 测试发现/methodB/{param1}/{param2}和/methodB/{param1}都可以通过 * @param param1 * @param param2 * @return */ @ResponseBody @GetMapping(value={"/methodB/{param1}","/methodB/{param1}/{param2}"}) public String methodB(@PathVariable(value = "param1",required = true) Integer param1,@PathVariable(value = "param2",required = false) Integer param2){ return "methodB success:param1="+param1+",param2="+param2; } /** * 测试发现/methodC/{param1}/{param2}可以通过,/methodC/{param1}则报错 * @param param1 * @param param2 * @return */ @ResponseBody @GetMapping(value="/methodC/{param1}/{param2}") public String methodC(@PathVariable(value = "param1",required = false) Integer param1,@PathVariable(value = "param2",required = false) Integer param2){ return "methodC success:param1="+param1+",param2="+param2; } /** * 测试发现/methodD/{param1}/{param2}可以通过,/methodD/{param1}则报错 * @param param1 * @param param2 * @return */ @ResponseBody @GetMapping(value="/methodD/{param1}/{param2}") public String methodD(@PathVariable(value = "param1",required = true) Integer param1,@PathVariable(value = "param2",required = false) Integer param2){ return "methodD success:param1="+param1+",param2="+param2; } /** * 测试发现/methodE/{param1}/{param2}/suffix可以通过,/methodC/{param1}/suffix和/methodC/suffix则报错 * @param param1 * @param param2 * @return */ @ResponseBody @GetMapping(value="/methodE/{param1}/{param2}/suffix") public String methodE(@PathVariable(value = "param1",required = false) Integer param1,@PathVariable(value = "param2",required = false) Integer param2){ return "methodE success:param1="+param1+",param2="+param2; } /** * 测试发现/methodF/{param1}/{param2}/suffix可以通过,/methodD/{param1}/suffix和/methodD/suffix则报错 * @param param1 * @param param2 * @return */ @ResponseBody @GetMapping(value="/methodF/{param1}/{param2}/suffix") public String methodF(@PathVariable(value = "param1",required = true) Integer param1,@PathVariable(value = "param2",required = false) Integer param2){ return "methodF success:param1="+param1+",param2="+param2; }}
好,这篇博客就到这里,大家下次见……
哈哈,开个小玩谑,接下来解释一下(背景音药走起,动词大慈…),first,让我们看一下methodA和methodB
- 对于methodA,我的注释已经写了,/methodA/{param1}/{param2}可以通过,/methodA/{param1}则报错,因为@PathVariable的required默认值是true(这里注意不要把required默认值误以为是false),所以理所当然你的param1和param2都要提供,不然就报错;
- 对于methodB,我通过将param1设置为必须,而param2设置为非必须,那么我就可以通过判断有木有param2来映射路径,所以/methodB/{param1}/{param2}和/methodB/{param1}都可以通过;当然你如果把param1和param2都设置为非必须的捏,其实这种情况和methodB产生的结果一毛一样;
刚开始测试完methodA和methodB后我就想/method/{param1}/{param2}其实是隐含包括/method/{param1}的,就是param2不输入呗,但是测试了methodC和methodD后我发现我被打脸了(难道我滴想法不对么)
- 如methodC所示,我只提供了/methodC/{param1}/{param2}这一种匹配路径,同时将param1和param2都设置为非必须,然后测试发现/methodC/{param1}/{param2}可以通过,/methodC/{param1}则报错,本来按照我的想法/methodC/{param1}报错是可以理解的,因为在param1和param2都可以为空的情况下你只传一个参数,他不知道这到底是param1还是param2,但是按照顺序来讲的话,如果你的参数紧接着methodC,例如methodC/1的话,那么他就代表着1会匹配param1,因为param1也是紧接着methodC,当然没有methodC//1这种写法,不然的话1可能会匹配param2,呵呵呵…
- mehtodD也没什么好讲的,因为它的结果和methodC一样,尽管它的param1是必须,而param2是非必须,然鹅这并没有什么卵用,看来还是param1太寂寞了,没有param2就不行;
接下来我又开始开脑洞,是不是给匹配路径加一个后缀就好了,因为在我的想法中后缀起到一个定位功能,有了起点和终点,应该可以了吧,但是又一次被现实无情的打脸,methodE和methodF就不细讲了。
本篇博客的结论就是如果你想让一个controller方法处理多个请求,那么就按methodB的套路来,不要想太多,如果博客有什么错误的地方,欢迎请大家指正……
0 0
- springMVC的一个controller方法怎么处理多个请求地址
- SpringMVC中一个Controller多个方法
- springMVC一个Controller实现多个方法
- springMVC一个Controller处理所有用户请求的并发问题
- springmvc请求一次,访问多个controller中的方法
- springMVC中一个class(controller)中的多个方法
- springmvc中针对一个controller方法配置两个url请求
- 处理重复请求controller的方法
- 一个Action内包含多个请求处理方法的处理
- Struts2一个Action内包含多个请求处理方法的处理
- Struts2一个Action内包含多个请求处理方法的处理
- Struts2一个Action内包含多个请求处理方法的处理(三种方式)
- Struts2一个Action内包含多个请求处理方法的处理
- springmvc学习笔记(三)一个Controller中实现多个方法
- SpringMVC一个controller写多个方法
- SpringMVC下处理请求(配置Controller)
- springMVC处理Ajax请求的一个错误
- 在一个Servlet中处理多个请求方法
- re.sub 使用方法
- codeforces 754A(思维题)
- 多线程的实现方式
- 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP
- 大数相乘
- springMVC的一个controller方法怎么处理多个请求地址
- Tomcat的简单配置
- 13 QT的QProcess与进程间的通信
- cron表达式轮询操作
- 导航条实例(哔哩哔哩部分)
- DHTML技术演示---动态设置表格行间隔显示、表格排序、鼠标悬停样式改变
- 复习
- 线程池的好处
- Android学习六 Activity