Не могу заставить Spring MVC -диспетчер работать должным образом, когда шаблон URL -адреса является пути
-
27-10-2019 - |
Вопрос
У меня есть веб -приложение, которое мы применяем Spring MVC только для служб отдыха. Мы хотим, чтобы наши службы отдыха появились под ${contextPath}/rest/**
, однако, когда я установил это, мы получаем:
Картирование не найдено для HTTP -запроса с URI [/myApp/rest/testsvc/message] в диспетчерселлере с именем 'Spring MVC Dispatcher Servlet'
Мой web.xml
имеет:
<servlet>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/servlet-context.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/rest</url-pattern>
</servlet-mapping>
servlet-context.xml
, что в порядке и регистрирует услуги по мере их зарегистрированного при стартапе.
<context:component-scan base-package="com.mycompany.myapp.rest" />
<mvc:annotation-driven />
Мой контроллер выглядит следующим образом:
@Controller
@RequestMapping(value = "/rest/testService")
public class TestREST {
@RequestMapping(value="message", method=RequestMethod.GET)
public @ResponseBody String getMessage() {
return "REST working";
}
Если я захожу url-pattern
в web.xml
к *.Rest и моим отображению запросов на message
к message.rest
оно работает.
Решение
Проблема в том, что вы повторили /rest
Префикс в обоих web.xml
а также @RequestMapping
. Анкет Это должно быть в одном или в одном, но не оба, например,
<url-pattern>/rest</url-pattern>
а также
@RequestMapping(value = "/testService")
Пути, на которых @RequestMapping
действует части пути, который следует за частью сервлета, и ваш web.xml
определяет часть сервлета как /path
, так @RequestMapping
матчи против того, что осталось, т.е. /testService
.
В своей нынешней форме ваш @RequestMapping
на самом деле соответствует {contextPath}/rest/rest/testService
.
Другие советы
Возможно, вы могли бы попробовать измениться на <url-pattern>/rest/*</url-pattern
> или <url-pattern>/rest*</url-pattern
> и посмотрите, поможет ли это.