2010-03-15 102 views
2

我在将项目的特定URL请求映射到其中一个控制器时遇到问题。Spring 3.0:处理程序映射问题

的网址是:http://HOSTNAME/api/v1/profiles.json 其部署的战争:api.war

错误我得到的是以下几点:

[PageNotFound]没有找到映射与URI HTTP请求 [/api/v1/profiles.json]在 DispatcherServlet的名称为 '动作'

配置我是FOL降脂:web.xml中:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/applicationContext-security.xml</param-value> 
</context-param> 

<!-- Cache Control filter --> 
<filter> 
    <filter-name>cacheControlFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 

<!-- Cache Control filter mapping --> 
<filter-mapping> 
    <filter-name>cacheControlFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<!-- Spring security filter --> 
<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 

<!-- Spring security filter mapping --> 
<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<!-- Spring listener --> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<!-- Spring Controller --> 
<servlet> 
    <servlet-name>action</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>action</servlet-name> 
    <url-pattern>/v1/*</url-pattern> 
</servlet-mapping> 

动作-servlet.xml中:

<mvc:annotation-driven/>  

<bean id="contentNegotiatingViewResolver" 
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="favorPathExtension" value="true" /> 
    <property name="favorParameter" value="true" /> 
    <!-- 
    default media format parameter name is 'format' 
    --> 
    <property name="ignoreAcceptHeader" value="false" /> 
    <property name="order" value="1" /> 
    <property name="mediaTypes"> 
     <map> 
     <entry key="html" value="text/html"/> 
     <entry key="json" value="application/json" /> 
     <entry key="xml" value="application/xml" /> 
     </map> 
    </property> 
    <property name="viewResolvers"> 
     <list>   
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
      <property name="prefix" value="/WEB-INF/jsp/"/> 
      <property name="suffix" value=".jsp"/> 
      <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
     </bean> 
     </list> 
    </property> 
    <property name="defaultViews"> 
     <list>    
     <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" /> 
     <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
      <constructor-arg> 
      <bean class="org.springframework.oxm.xstream.XStreamMarshaller" /> 
      </constructor-arg> 
     </bean>   
     </list> 
    </property> 
</bean> 

应用程序上下文的安全性:

<sec:http auto-config='true' > 
    <sec:intercept-url pattern="/login.*"  filters="none"/> 
    <sec:intercept-url pattern="/oauth/**"  access="ROLE_USER" /> 
    <sec:intercept-url pattern="/v1/**"  access="ROLE_USER" /> 
    <sec:intercept-url pattern="/request_token_authorized.jsp" access="ROLE_USER" /> 
    <sec:intercept-url pattern="/**"  access="ROLE_USER"/> 
    <sec:form-login authentication-failure-url ="/login.html" 
     default-target-url ="/login.html" 
     login-page  ="/login.html" 
     login-processing-url ="/login.html" /> 

    <sec:logout logout-success-url="/index.html" logout-url="/logout.html" /> 
</sec:http> 

控制器:

@Controller 
public class ProfilesController { 

@RequestMapping(value = {"/v1/profiles"}, method = {RequestMethod.GET,RequestMethod.POST}) 
public void getProfilesList(@ModelAttribute("response") Response response) { 
    .... 
} 

} 

请求永远不会到达此控制器。

任何想法?

+0

查看http://stackoverflow.com/questions/2045384/spring-mvc-mapping-problem/2045422#2045422 – axtavt 2010-03-15 17:09:42

回答

5

注解在处理之前不会执行任何操作。您将需要

<context:component-scan base-package="path.to.controllers"/> 

为根“豆”标签的孩子,为了让Spring来扫描控制器。 Spring将扫描基本包中的控制器并且它是后代。

此标签需要

xmlns:context="http://www.springframework.org/schema/context" 

xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" 

在你的根 “豆” 的标签。

+0

也许有点晚。 只是为了关闭这个线程,这解决了这个问题 – 2010-08-03 17:52:44