Добавить contextpath param в @GetMapping

Я пытаюсь создать свои маршруты без зависимости от сервера.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";

все работает отлично,но иногда мне не нужно перенаправлять.

идея заключается в том, чтобы следовать процессу развертывания в виде файла war в tomcat, как я просил в эта ссылка: как получить контекстный путь в контроллере без набора в приложении.свойства

Итак, вопрос: можно добавить некоторые параметры в @GetMapping, чтобы добавить contextPath

обновление 1

Я не уверен, что вы спрашиваете.

предположим, я создаю два военных проекта из одного проекта под названием webapp1 и webapp2, и я развертываю на своем сервере tomcat.

Я могу получить доступ к обоим проектам, таким как это:

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

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

но когда я делаю возврат к моей странице thymeleaf, расположенной в src / main/ресурсы/шаблоны/Панель мониторинга/администратор / список.HTML-код страница не найдена (это ошибка), потому что в метод @GetMapping не могу найти contextPath, который может быть webapp1 или webapp2.

Я не хочу использовать сервер.contextPath, потому что в этом случае я думаю, что у вас может быть только один проект с именем сервера.самом contextpath.

спасибо

2 ответов


Spring поддерживает его контекстный путь, поэтому вам не нужно беспокоиться об этом. Ваш код выглядит нормально.

Что вы можете попробовать.

Попробуйте удалить сервер.линия contextPath полностью из приложения.файл свойств. остановите очистку и сборку сервера, перезапустите сервер и снова запустите приложение.


Я не уверен, что правильно понял ваш вопрос, но у меня есть аналогичная настройка для моего проекта. У меня есть 2 приложения:

  1. веб-приложение развернуто в http://localhost:8080/WebApplication

  2. мобильное приложение развернуто в http://localhost:8080/MobileApplication

у меня также есть один url, который является тем же: / домой

  1. http://localhost:8080/WebApplication/home - > возвращает список функций веб-приложения

  2. http://localhost:8080/MobileApplication/home - > возвращает список функций мобильных приложений.

есть два параметра, с которыми я имею дело:

  1. запрос.getContextPath () возвращает имя приложения - > WebApplication или MobileApplication

  2. запрос.getServletPath () возвращает путь после контекста. В моем случае он возвращает "/ home " для обоих приложений.

кроме того, если вам нужно передать параметры, почему вы используете param1 в url-адресе? Это должно быть что-то вроде это:
http://localhost:8080/webapp1/dashboard/admin/list?param1=100

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

в этом случае, ваш код будет такой:

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

  //Some stuff
  String localParam1 = param1;

  //You can also use the following line. In which case, you can get rid of the @PathVariable in your method declaration.
  String localParam1 = request.getParameter("param1");

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

Я также предлагаю вам изучить использование @RequestMapping вместо @GetMapping Это то, что я использую для своего проекта:

@RequestMapping(value = "/home", method = RequestMethod.GET)