有没有办法判断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 */
}
我要做的第一件事就是确保该控制器被组件扫描拾取。
有什么建议吗?
答案 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 :(得分:1)
我做了ApplicationContextDumper。将其添加到应用程序上下文中,它将在应用程序上下文初始化完成时将所有bean及其依赖项在当前上下文和父上下文(如果有)中转储到日志文件中。它还列出了未引用的bean。
受到answer的启发。
答案 2 :(得分:0)