【问题标题】:Spring MVC - WARN [PageNotFound] No mapping found for HTTP request with URI [/foo/bar/baz/rest] in DispatcherServlet with name 'spring-rest'Spring MVC - WARN [PageNotFound] 在 DispatcherServlet 中找不到带有 URI [/foo/bar/baz/rest] 的 HTTP 请求的映射,名称为“spring-rest”
【发布时间】:2012-03-29 01:14:48
【问题描述】:

我在 JBoss 应用服务器上运行 Spring MVC。

文件: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>

它已将调度程序 servlet 映射到 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] 在名为“spring-rest”的 DispatcherServlet 中找不到具有 URI [/foo/bar/baz/rest] 的 HTTP 请求的映射

但是当我在 Java 中将值从“/rest/”更改为“/”时:

@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>

【问题讨论】:

    标签: spring-mvc jboss controller


    【解决方案1】:

    如果您真的希望通过单一方法同时处理 /rest/rest/*,请使用:

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

    与:

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

    它有效,因为它接受/foo/bar/baz 之后的所有内容,而不仅仅是/rest

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      相关资源
      最近更新 更多