如何从 Spring MVC 中的页面标题创建 RESTful URL?

Posted

技术标签:

【中文标题】如何从 Spring MVC 中的页面标题创建 RESTful URL?【英文标题】:How to create RESTful URLs from page title in Spring MVC? 【发布时间】:2012-09-01 09:49:43 【问题描述】:

当我的应用程序的用户创建一个新页面时,她被要求输入“页面标题”以及其他详细信息。 (例如,她输入:“Megan 的页面标题”) 应用程序将实例保存到数据库中。

现在我的要求是,当任何人尝试访问该页面时,URL 应该是:

www.websitename.com/pages/page-title-by-megan

我知道,使用 Spring MVC,我可以通过以下方式轻松获得“page-title-by-megan”部分:

@RequestMapping("/pages/pageTitle")
public String getPage(@PathVariable String pageTitle, Model model) 
    List<Pages> pages = pageService.getPages(pageTitle);
    model.addAttribute("pages", pages);
    return "pages";

但问题是

Q1:要检索相关页面,我需要将 pageTitle "page-title-by-megan" 与实际数据一起存储在数据库中吗?这是唯一的技巧吗?还是有更好的办法?

Q2:如果这是唯一的方法,如何从“Page Title by Megan”有效地形成“page-title-by-megan”这样的字符串?再说一遍,有没有更好的方法?

请指导。非常感谢。

【问题讨论】:

【参考方案1】:

第一季度: 我认为唯一的方法是按照您所说的将 url 存储到数据库中,并有一个独特的限制。

第二季度: 假设pageTitle 包含用户输入的标题,请在提交完成后在控制器中使用它:

String transformedPageTitle = pageTitle.toLowerCase().replace(" ", "-");

【讨论】:

感谢您的回复。但是再想一想,我想知道如果我只是在每次调用页面时在运行时解析数据库标题,将 url 字符串与来自 d​​b 的页面标题进行比较,是否会更有效?怎么说? 当 Stack Overflow 本身给了我一个新想法时,我对此感到疑惑。当我们查看这个页面本身的 URL ***.com/questions/12226713/… 时,我可以看到他们在 URL 12226713 之间使用了唯一约束。所以即使我们只输入 ***.com/questions/12226713,页面也会被呈现。聪明,也适用于 SEO。怎么说? 没错,但是即使我们粘贴了***.com/questions/1234567,浏览器如何在地址栏中显示***.com/questions/1234567/this-is-sample?这是如何实现的? 因为仅使用密钥 (1234567) 检索问题,并且我认为加载后完成了到完整 URL 的内部重定向。

以上是关于如何从 Spring MVC 中的页面标题创建 RESTful URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring MVC、Spring Security 和 FreeMarker 在每个页面上显示用户名

如何从 <form:select> Spring MVC 传递数据

Spring MVC 应用程序中的可插入页面

如何在 Spring MVC 应用程序中自动导航到登录页面?

Gradle 如何配置构建文件以从同一项目创建 Spring boot jar 和 spring web-mvc war

如何从 Spring MVC 中的请求参数中修剪空格