作者NullLife (接下来如何?)
看板java
标题[问题] spring ServletRegistrationBean
时间Tue Feb 27 15:53:56 2018
我想注册两个Servlet, 然後各自所scan的controller的url会根据各自servlet分开
例如我有两个controller, A跟B
A controller @RequestMapping(value = "/test1")
B controller @RequestMapping(value = "/test2")
这两个controller分别由两个servlet所建立(透过ServletRegistrationBean)
A Servlet mapping /aaa/*
B Servlet mapping /bbb/*
所以使用的路径为
A /aaa/test1
B /bbb/test2
以上这样是没问题的。
可是我现在有个需求是controller想要都mapping /test
就是想要使用的路径为
/aaa/test
/bbb/test
的时候 就会出现 "Ambiguous mapping." 的讯息
我不懂的是若是由不同的servlet负责不是应该自然会根据该servlet所mapping的url
为prefix,然後再根据controller的mapping为路径吗?
在A跟B mapping不同的的url的时候的确是这样,
可是为什麽mapping相同的url却又会报错?
想请问大大应该要如何修改, 才可以达到我的需求。
--
可能我将会无甚功名 引不来掌声荣耀你
请相信我 我的柔情 牵引你 守护你
同是孤独的一粒微尘 在空旷的阶上漂浮
黄玠
让我仔细的陪你 踱到尽端
阶
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 203.69.123.228
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1519718040.A.E67.html
1F:→ pttworld: 不同controller写/aaa和/bbb 02/27 20:46
2F:→ pttworld: controller的method再mapping /test 02/27 20:47
3F:→ pttworld: 上面是每个/test不打算一样的情况,如果都打算一样 02/27 20:58
4F:→ pttworld: 同一个controller相同method多个path则 02/27 20:59
5F:→ pttworld: mapping value={"/aaa/test", "/bbb/test" ... method= 02/27 21:00
6F:→ pttworld: 可以写一起。 02/27 21:00
大大误会我的意思了 我就是要根据servlet来分开prefix url
因为我要建立类似Swagger功能的url 但我怕该功能所mapping的url会跟业务逻辑API冲突
所以我想要根据servlet所mapping的url就可以分开url且不冲突
※ 编辑: NullLife (123.194.139.82), 02/28/2018 21:42:35
7F:→ qrtt1: 弄点 sample code 来玩啊,你的描述有点难懂 03/02 01:32
歹势 图来了~~~
我有两个package, 两组config+conftroller, 如下图
https://imgur.com/NFf2SLt
ConfigAAA.java (scan "org.aery.aaa")
https://imgur.com/Pw2UFrx
ControllerAAA.java
https://imgur.com/zN7FwjR
ConfigBBB.java (scan "org.aery.bbb")
https://imgur.com/IirnlBj
ControllerBBB.java
https://imgur.com/nSzivLN
ConfigAAA register Servlet mapping /aaa/*
然後scan "org.aery.aaa" 建立 ControllerAAA mapping /test1
ConfigBBB register Servlet mapping /bbb/*
然後scan "org.aery.bbb" 建立 ControllerBBB mapping /test2
启动後spring log如下
https://imgur.com/i1rZt7L
然後 测试 /aaa/test1 有通
测试 /bbb/test2 有通
就在刚刚写这个sample的时候发现其实/aaa/test2跟/bbb/test1也有通...
看起来controller的mapping跟register的servlet没有关系...!?
我以为controller的mapping url会以register的servlet为prefix url...
所以当我将ControllerAAA跟ControllerBBB的mapping url都改成/test就会报错了...
而我原本想做到的就是根据servlet, 会自动将各自发现的controller分开不同的url
当然有人会说在class上加上mapping就好
但我现在建立类似swagger的东西 会在专案内镶入一个模组
该模组会有许多API, 所以我希望透过一个prefix就可以改变这个模组的url
进而避免万一专案需要使用的url与该模组冲突
这个模组最後当然会是一个jar引入专案内
所以才会想要在runtime的时候可以让专案自行变更该模组API的prefix。
是我观念有错还是有比较好的方式可以达到这个需求 还请大大指点 <(_ _)>
8F:→ ssccg: root context有把spring boot预设的DispatcherServlet关掉? 03/02 11:21
我没有启用耶 整个环境设定就那四张图~
跟default DispatcherServlet有关吗?
※ 编辑: NullLife (203.69.123.228), 03/02/2018 12:09:11