如何判断Spring是否加载了我的@Controller?

时间:2014-07-30 01:41:27

标签: spring spring-mvc

有没有办法判断Spring是否加载了我的@Controller

我正在申请一个网址,但我没有点击我的控制器,我无法弄明白为什么

我正在通过执行组件扫描来加载控制器

<context:component-scan base-package="com.example.app.web"/>

与故障控制器位于同一软件包中的其他控制器工作正常。

我的控制器代码是:

@Controller
@RequestMapping(value = "/app/administration/ecosystem")
public class AppEcosystemController {

    @Autowired
    EcosystemManagerService ecosystemManagerService;

    @RequestMapping(value = "/Foo", method = RequestMethod.GET)
    public String getEcosystem() {
        /* Implementation */
    }

我要做的第一件事就是确保该控制器被组件扫描拾取。

有什么建议吗?

3 个答案:

答案 0 :(得分:4)

只需为您的应用启用日志记录,您就可以在 INFO 级别找到此信息 例如,在我的应用程序中,我有一个名为UserController的控制器。

以下log4j.properties可以解决问题。

log4j.rootLogger=INFO, FILE
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=../logs/rest-json.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

我可以在日志中看到RequestMappingHandlerMapping映射了我的控制器(向右滚动)。

07:28:36,255  INFO RequestMappingHandlerMapping:182 - Mapped "{[/rest/**/users/{id}],methods=[GET],params=[],headers=[],consumes=[],produces=[text/xml || application/json],custom=[]}" onto public org..domain.User org.ramanh.controller.UserController.getUser(java.lang.String)
07:28:36,255  INFO RequestMappingHandlerMapping:182 - Mapped "{[/rest/**/users],methods=[POST],params=[],headers=[],consumes=[],produces=[text/xml || application/json],custom=[]}" onto public void org..controller.UserController.addUser(org...domain.User)

如果您仍然不确定我会建议添加使用@PostConstruct注释的方法。 您可以在日志中轻松查找消息,或在此方法中设置断点。

@PostConstruct
protected void iamAlive(){
    log.info(“Hello AppEcosystemController”)
}

如果您发现您的控制器已正确初始化但仍无法访问该网址。我会测试以下内容

  1. 您收到404错误 - 也许您没有指出正确的错误 url(不要忘记将应用程序添加为URL的前缀)
  2. 您收到404错误 - web.xml中的Dispatcher servlet映射不符合
  3. 上面的网址
  4. 你得到403/401 - 也许你正在使用 弹簧安全,它阻止了网址
  5. 你得到406 - 你的 内容类型定义与您的请求相冲突
  6. 你得到50倍 - 你的代码中有些东西

答案 1 :(得分:1)

我做了ApplicationContextDumper。将其添加到应用程序上下文中,它将在应用程序上下文初始化完成时将所有bean及其依赖项在当前上下文和父上下文(如果有)中转储到日志文件中。它还列出了未引用的bean。

受到answer的启发。

答案 2 :(得分:0)

您可以从概述here开始启用Spring的调试日志记录。

我还建议利用你在弹簧测试罐中找到的MVC测试支持。有关如何使用它的详细信息,请参见herehere