springMVC的一个controller方法怎么处理多个请求地址
2017-05-14 11:32
671 查看
写这篇博客的想法是前一阵子在csdn的问答中遇到有人问这个问题(传送门:http://ask.csdn.net/questions/382662),当时我也很懵逼,因为确实没有具体研究过,所以趁这次机会记录一下,如果有什么不对滴,请大家多多斧正,始めましょう。。。
好,这篇博客就到这里,大家下次见……
哈哈,开个小玩谑,接下来解释一下(背景音药走起,动词大慈…),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的套路来,不要想太多,如果博客有什么错误的地方,欢迎请大家指正……
先放代码
/** * 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的套路来,不要想太多,如果博客有什么错误的地方,欢迎请大家指正……
相关文章推荐
- 在springmvc中controller的一个方法处理多个不同请求
- springMVC一个Controller处理所有用户请求的并发问题
- springmvc 一个url请求,多次进入controller 解决方法
- springMVC一个Controller处理所有用户请求的并发问题
- 一个servlet处理多个请求,地址字符串怎么处理呢
- springMVC一个Controller处理所有用户请求的并发问题
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- springMVC一个Controller处理所有用户请求的并发问题
- iOS 网络图片处理问题中,怎么解决一个相同的网络地址重复请求的问题
- 超简单方法解决Struts2中一个action处理多个请求
- 《转》struts2动态方法配置 Action,使一个Action可处理多请求
- springMVC对于controller处理方法返回值的可选类型
- tomcat服务器中设置一个action请求等地址为首页的方法
- springMVC中一个controller多个方法
- springMVC处理Ajax请求的一个错误
- springMVC对于controller处理方法返回值的可选类型
- springMVC对于controller处理方法返回值的可选类型
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射
- springMVC对于controller处理方法返回值的可选类型
- Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中的路径问题,通配符映射