java - Spring mvc 将 url "myapp.com/Foo/12345/test-one"重写为 "myapp.com/Foo/12345/test-one-a-b"

标签 java spring url spring-mvc

我想使用普通的 spring mvc Controller 并使用路径变量请求映射。

我不想转发或重定向,只是改变用户看到的字符串。

@RequestMapping(value = "/Foo/{id}/*", method = RequestMethod.GET)
public ModelAndView getFoo(@PathVariable final String friendlyUrl) {
//how can I rewite the url that user sees ?
}

(与更改 stackoverflow 上现有问题的标题时的行为相同)

最佳答案

如果您在 wireshark、firebug 或其他东西中观察流量,stackoverflow 会向最终 URL 发送 HTTP 301 永久移动。 你也可以这样做。

为此您需要HttpServletResponse,您可以将它添加到方法签名中以将其注入(inject)。 设置永久重定向:

String rightUrl = urlCompleter.complete(friendlyUrl);
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", rightUrl);

您需要自己实现 urlCompleter 的地方,例如。查看数据库条目表并找到正确的 url 组件。

关于java - Spring mvc 将 url "myapp.com/Foo/12345/test-one"重写为 "myapp.com/Foo/12345/test-one-a-b",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14081570/

相关文章:

java - spring事务注释方法无需对实体进行合并调用

java - Assets 不会在 spring 4.1.7 中加载

mysql - 从 MYSQL 保存和检索 URL

android - 如何从 Android 上的 URL 页面获取预览缩略图?

Java:从 Java 类返回相对 URL?

java - 如何在java spring boot中使用多个join sql查询

java - spring Kafka模型不在可信包中

java - Spring,SockJS - WebSocket 握手期间出错 : Unexpected response code 400

java - Spring 4 二进制文件下载

java - 发布到数组列表