Spring MVC - WARN [PageNotFound] Не найдено сопоставление для HTTP-запроса с URI [/ foo / bar / baz / rest] в DispatcherServlet с именем «spring-rest» - PullRequest
1 голос
/ 29 марта 2012

Я запускаю Spring MVC на сервере приложений JBoss.

Файл: jboss-web.xml:

 <jboss-web>
            <context-root>/foo/bar/baz</context-root>
        </jboss-web>

Корень контекста определяется как / foo / bar / baz, что я могуне меняется.

Файл: web.xml:

<servlet>
                <servlet-name>spring-rest</servlet-name>
                    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                    <load-on-startup>3</load-on-startup>
                </servlet>

          <servlet-mapping>
                    <servlet-name>spring-rest</servlet-name>
                    <url-pattern>/</url-pattern>
                </servlet-mapping>

В нем сервлет-диспетчер сопоставлен с URL "/"

Java: (Контроллер)

@RequestMapping(value="/rest/*", method = RequestMethod.POST)
            @ResponseBody
            public SomeResponse processRequest(@RequestBody SomeRequest someRequest)
            {
              return someResponse;
            }

Я пытаюсь обработать запрос этим способом.

Когда Spring загружается в JBoss, я вижу следующее: [

DefaultAnnotationHandlerMapping] Mapped URL path [/rest/*] onto handler 'MyController'
[DefaultAnnotationHandlerMapping] Mapped URL path [/rest/*.*] onto handler 'MyController'
[DefaultAnnotationHandlerMapping] Mapped URL path [/rest/*/] onto handler 'MyController

'

Я пытаюсь получить доступ к: http://localhost:8080/foo/bar/baz/rest,, что я вижу:

WARN [PageNotFound] Не найдено сопоставление для запроса HTTP с URI [/ foo / bar / baz / rest] в DispatcherServlet с именем'spring-rest'

Но когда я изменяю значение на "/ " с "/ rest / " в Java как:

@RequestMapping(value="/*", method = RequestMethod.POST)

Тогда оно работает нормально.Как исправить проблему?

spring-rest-servlet.xml:

<bean   class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
            <property name="alwaysUseFullPath" value="true"/>
            </bean>

            <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
                <property name="alwaysUseFullPath" value = "true" />
            </bean>

1 Ответ

0 голосов
/ 30 марта 2012

Если вы действительно хотите, чтобы и /rest, и /rest/* обрабатывались одним способом, используйте:

@RequestMapping(value={ "/rest", "/rest/*" }, method = RequestMethod.POST)

с:

@RequestMapping(value="/*", method = RequestMethod.POST)

это работает, потому что он принимает все после /foo/bar/baz, а не только /rest

...