我想知道Spring MVC中是否有办法将“url names”映射到URLS。例如:
list_users -> /admin/users/list
edit_user?id=123 -> /admin/users/edit/123 (or /users/edit?id=123)
list_programs -> /admin/programs/list
我来自PHP背景(特别是Symfony),其中每个URL /操作都有一个“路由名称”,您可以使用它在视图模板中创建URL。在Symfony中,您可以在模板中执行以下操作:
{{ path('user_edit', { 'id' : 123} }}
//output = /admin/users/edit/123
URL不一定需要RESTful,但我只是想知道是否可以使用Spring MVC完成这样的事情。
我考虑过的可能的解决方案:
将网址列在属性/消息文件中,例如:
url.users.edit=/admin/users/edit/{id}
url.users.list=/admin/users/list
然后使用<spring:message code="url.users.list" />
或类似的内容生成网址。这已经是普遍接受的解决方案吗?这可能是不好的做法吗?
我问的原因是,在整个JSP中分布完整的URL似乎是不好的做法。如果25个URL位于“/ admin”子目录下,并且我想将它们移动到不同的子目录,例如“/ backend”,会发生什么。
请原谅我,如果在这个地方有重复的帖子,或者有一个我忽略的简单解决方案,但这是一个难题,找到一个具体的答案。
谢谢!
答案 0 :(得分:2)
如果有人遇到这篇文章,我找到了一个将名称映射到Spring MVC的URL的解决方案:
https://github.com/resthub/springmvc-router
这个解决方案可以很好地完成工作,我特别喜欢这样一个事实,即所有的URL /路由都可以保存在一个中心位置。此实现使@RequestMapping
注释无效。
请记住以下几点:
确保您的调度程序servlet使用*
作为URL参数。我花了一段时间才发现单独/
不起作用,并且会导致网址生成错误。
<servlet-mapping>
<servlet-name>spring-dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>