@RequestMapping没有异常工作

时间:2012-08-17 17:05:16

标签: spring

我有一个班级

@Controller
@RequestMapping("/auth")
public class LoginController {


 @RequestMapping(value = "/login", method = RequestMethod.GET)
 public String getLoginPage(@RequestParam(value="error", required=false) boolean error, 
   ModelMap model) {

}

}

的web.xml

<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
                classpath:META-INF/spring-servlet.xml
        </param-value>
    </init-param>
<load-on-startup>1</load-on-startup>
</servlet>

appcontext.xml

<mvc:annotation-driven/>

<context:component-scan base-package="mysrc.src"/>

spring servlet.xml

<context:component-scan base-package="mysrc.src"/>

           <mvc:annotation-driven/>

我得到的错误就像&#34;没有在调度员中发现映射等等等等#34;

但是现在我在控制台上看不出异常。

我只看到404

http://localhost:9090/app/auth/login

我在调试模式下将断点放在getLoginPage方法中但没有流量。

除了建议之外,我想问一下,我怎么能确定Spring已经扫描了一个已实现的@RequestMapping类?在启动控制台上搜索可能吗?

2 个答案:

答案 0 :(得分:3)

通常当您从Spring获得404没有错误消息时,通常意味着您的应用程序部署在与您预期不同的上下文中。例如,您的代码示例表明您正在将Web应用程序部署到/,您确定要部署它吗?你在用tomcat吗?如果是这样,您的webapp应命名为ROOT.war。您能否提供更多详细信息,例如您在何处/如何部署您的webapp以及web.xml?

就你的映射而言,Spring将在INFO日志记录级别记录它扫描的控制器及其请求路径。如果调度程序servlet无法将您的请求与控制器匹配,则它将始终给您一条错误消息,因此没有错误消息指示您的请求不通过调度程序servlet。

答案 1 :(得分:1)

您的请求映射看起来正确。

您可以为控制器创建一个构造函数,并在其中放置一个日志语句或断点,以查看控制器是否由spring创建。

请注意,组件扫描也会初始化控制器两次(一次用于appcontext.xml,一次用于servlet.xml)。您应该添加过滤器以确保仅从servlet.xml创建控制器:

appcontext.xml(控制器除外):

<context:component-scan base-package="x.y.z">
  <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation" />
</context:component-scan>

servlet.xml(仅限控制器):

<context:component-scan base-package="x.y.z" use-default-filters="false">
  <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
</context:component-scan>

只是为了确定:base-package的{​​{1}}属性必须是有效的java包,而不是src目录的路径(component-scan看起来有点像你的src文件夹;-))