Не могу заставить Spring MVC -диспетчер работать должным образом, когда шаблон URL -адреса является пути

StackOverflow https://stackoverflow.com/questions/5367309

Вопрос

У меня есть веб -приложение, которое мы применяем 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> и посмотрите, поможет ли это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top