我正在尝试创建路由而不依赖于application.properties中的server.contextPath

这是一个例子:

@PreAuthorize("hasRole('ROLE_ADMIN')
@GetMapping("/dashboard/admin/list/param1/{param1}")
public String method(@PathVariable String param1, Model model, HttpServletRequest request) {

  //Some stuff

  String contextPath = request.getContextPath();
  return contextPath + "/dashboard/admin/list";
}

但是按预期,由于添加了contextPath,因此找不到该视图。

如果我这样重定向:
String contextPath = request.getContextPath();
String redirect = contextPath + "/dashboard/admin/list";
return "redirect:/dashboard/admin/directorio/list";

一切正常,但有时我不需要重定向。

背后的想法是,按照我在此链接中的要求,遵循将过程部署​​为tomcat中的war文件的过程:
How to get context path in controller without set in application.properties

所以问题是:可以在@GetMapping中添加一些参数来添加contextPath

更新1

我不确定你在问什么。

可以说我从同一个名为webapp1和webapp2的项目中创建了两个war项目,并将其部署在tomcat服务器中。

我可以像这样访问两个项目:

http://localhost:8080/webapp1/dashboard/admin/list/param1/100

http://localhost:8080/webapp2/dashboard/admin/list/param1/200

但是当我返回到位于 src / main / resources / templates / dashboard / admin / list.html 的百里香页面时,找不到该页面(这是错误的),因为
@GetMapping 的方法无法找到contextPath,它可能是webapp1或webapp2。

我不想使用server.contextPath,因为在那种情况下,我认为您只能拥有一个名称为server.contextPath的项目。

谢谢

最佳答案

Spring维护它的上下文路径,因此您不必担心。
您的代码看起来不错。

您可以尝试的。

尝试从application.properties文件中完全删除server.contextPath行。停止清理和构建服务器,重新启动服务器,然后再次启动应用程序。

08-25 10:22