ComponentScan
中犯了一个错误,因为很多评论者指出,我改变了它但它仍然没有工作(仍然是404)。
我有一个项目,并且我使用了所有基于注释的配置。这是配置文件:
WebConfig.java
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "src.controller")
public class WebConfig extends WebMvcConfigurerAdapter{
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
WebInitializer.java
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { WebConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
我还有一个持久性配置,但我不认为这与此问题相关。无论如何,这是我的根路径控制器:
AuthorController.java
@Controller
@RequestMapping({"/authors", "/"})
public class AuthorController {
@Autowired
AuthorService authorservice;
@RequestMapping(method=RequestMethod.GET)
public String getAuthors(ModelMap model){
System.out.println("----------called--------------"); //not printed
List<Author> authors = authorservice.getAllAuthors();
model.addAttribute("authors", authors);
return "authors";
}
}
控制器永远不会被调用,我最终得到404错误。
答案 0 :(得分:0)
你能说出'AuthorController'所属的包的名称吗?我认为问题在于@ComponentScan(basePackages = "src")
。在这里,您应该添加控制器类的包名称。
@ComponentScan(basePackages = "com.sample.app")
@ComponentScan(basePackages = "com.sample.*")
@ComponentScan(basePackages = "com.*")
以上所有内容都是ComponentScan注释的有效条目。
答案 1 :(得分:0)
basePackages
注释的@ComponentScan
属性不代表您的java代码所在的文件夹。它代表了Spring应该扫描Spring bean的java类的根包。
因此,如果您的控制器位于com.myapp.web.controllers
,则按如下方式配置:
@ComponentScan(basePackages = "com.myapp.web.controllers")