将contextpath参数添加到@GetMapping

dav*_*ski 6 java thymeleaf spring-boot

我正在尝试创建我的路由,而不依赖于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";
}
Run Code Online (Sandbox Code Playgroud)

但正如预期的那样,由于添加了contextPath,因此找不到视图.

如果我像这样重定向:

String contextPath = request.getContextPath();
String redirect = contextPath + "/dashboard/admin/list";
return "redirect:/dashboard/admin/directorio/list";
Run Code Online (Sandbox Code Playgroud)

一切都很好,但有时我不需要重定向.

背后的想法是遵循流程在tomcat中部署为war文件,正如我在此链接中所要求的: 如何在application.properties中设置的情况下获取控制器中的上下文路径

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

更新1

我不确定你在问什么.

假设我从同一个项目中创建了两个war项目,名为webapp1和webapp2,我部署在我的tomcat服务器中.

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

HTTP://本地主机:8080/webapp1 /仪表板/管理/列表/参数1/100

HTTP://本地主机:8080/webapp2的/仪表板/管理/列表/参数1/200

但是当我返回位于src/main/resources/templates/dashboard/admin/list.html中的百万富翁页面时,找不到页面(这是错误的),因为在方法中@GetMapping找不到contextPath可以是webapp1或webapp2.

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

谢谢

小智 5

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

你可以尝试什么。

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