没有调用Spring MVC 4控制器

时间:2016-10-10 10:41:37

标签: java spring spring-mvc

编辑:我意识到我在我的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错误。

2 个答案:

答案 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")