SpringMVC 框架如何实现统一 URL

2016-10-24 10:11:08 +08:00
 PEP4JASON

期望的结果是 /xxx.do?service=login 登录, /xxx.do?service=register 注册, 就是前半截都是一致的 后半截不同 根据传参不通进入不同的控制器 请问这样能实现吗 能的话如何实现

4264 次点击
所在节点    问与答
23 条回复
shoaly
2016-10-24 10:22:20 +08:00
这个 url 好丑.... 为什么不直接是
/login
/register
因为前面既然都完全一样了... 就可以省去
PEP4JASON
2016-10-24 10:27:48 +08:00
@shoaly 想通过一个 URL 参数来管理控制器 便于文档的编写
murmur
2016-10-24 10:47:34 +08:00
/xxx/login
/xxx/register
写在 2 个方法上 注解就好了
ipeony
2016-10-24 10:48:12 +08:00
比较笨的方法。。用 @pathvariable
PEP4JASON
2016-10-24 10:49:33 +08:00
@Controller
@RequestMapping("/XXX")
...class ...{
@RequestMapping(params="service=register")
...fun(){
}
}
ipeony
2016-10-24 10:50:08 +08:00
@ipeony 看花眼了
PEP4JASON
2016-10-24 10:52:22 +08:00
这个方法 只能作用于一个控制器里面 , 控制器的映射名不能重复 ,所以想另寻解决方案
hellommd
2016-10-24 11:14:47 +08:00
简单点就是一个接口一个类,模块化,入口处根据接口名称利用 IoC 进行注入。
varrily
2016-10-24 11:29:16 +08:00
.do?method=xxx 这用法是 Struts 的用法, SpringMVC 更倾向于 RESTful 设计风格,至于截图的 api ,也有类似的 JSON-RPC
zhouzm
2016-10-24 12:54:10 +08:00
SpringMVC 默认的 URL 映射不支持通过 param 定位到不同的 controller ,只能先用 URL 定位 controller ,然后再用 param 窄化到具体的方法。

如果仅仅是为了调用者使用的话,编程的时候依然用 /login /register 写不同 controller ,然后用拦截器 Redirect url :
/xxx.do?service=login => /login
/xxx.do?service=register => /register
参考:
http://docs.spring.io/spring/docs/3.2.17.RELEASE/spring-framework-reference/html/mvc.html#mvc-handlermapping-interceptor
novaeye
2016-10-24 13:50:48 +08:00
PEP4JASON
2016-10-24 13:56:55 +08:00
@zhouzm 这样的话 如何处理传参呢
sherlocktheplant
2016-10-24 14:00:11 +08:00
@zhouzm 重定向会产生额外的请求

这里最好的办法是开发的时候 URL 按正常的 RESTFul 规则写 部署的时候配置好 url rewrite
PEP4JASON
2016-10-24 14:03:07 +08:00
@novaeye !! 一语道破, 之前怎么没想到用 urlrewrite 呢 ..
rails3
2016-10-24 14:03:12 +08:00
nginx
PEP4JASON
2016-10-24 14:47:03 +08:00
@sherlocktheplant @novaeye 请教一下 urlrewrite 怎么匹配 问号后面的参数 , 试了半天- -
PEP4JASON
2016-10-24 15:24:36 +08:00
<urlrewrite use-query-string ="true">
<rule>

<from>/gateway.sv\?service=(\w+)$</from>

<to>/$1.do</to>

</rule>
</urlrewrite>

这样写 多一个参数都进不去..
PEP4JASON
2016-10-24 16:40:55 +08:00
@rails3 捧油 详细点呢 , nginx 的重写跟 urlrewrite 好像作用差不多
hcymk2
2016-10-24 16:56:59 +08:00
PEP4JASON
2016-10-24 17:48:40 +08:00
@hcymk2 感觉跟 urlrewrite 一样是有限制的 , 参数顺序 和一些转发的参数 都不好控制

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/314936

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX