2016-10-10 185 views
0

編輯:我意識到我在我的ComponentScan中犯了一個錯誤,因爲很多評論者指出,我改變了它,但它仍然不工作(仍然404)。春季MVC 4控制器不叫

我有一個項目,我使用所有基於註釋的配置。下面是配置文件:

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錯誤。

+1

我懷疑你的基礎包名爲'src' .. –

+0

如果在'src'您的文件,然後加上'basepackage = 「。」'而不是 – emotionlessbananas

+0

@AsteriskNinja它位於'src'目錄下的包'controller'中,它應該是「src.controller」嗎?非常感謝。 – Liumx31

回答

0

你能告訴'AuthorController'所屬的包名嗎?我認爲問題與@ComponentScan(basePackages = "src")。在這裏你應該添加控制器類的包名稱。

@ComponentScan(basePackages = "com.sample.app") 

@ComponentScan(basePackages = "com.sample.*") 

@ComponentScan(basePackages = "com.*") 

以上所有內容都是用於ComponentScan註釋的有效條目。

+0

感謝您的回答,該軟件包被稱爲'controller',它位於'src'目錄中。所以'ComponentScan'真的只需要掃描包含控制器的包? – Liumx31

+0

我將它更改爲「src.controller」,而我仍然收到404。 – Liumx31

+0

請嘗試@ComponentScan(basePackages =「controller」)和@ComponentScan(basePackages =「controller。*」) – rinoy

0

basePackages@ComponentScan註解的屬性並不代表您的java代碼所在的文件夾。它代表了Spring應該掃描Spring bean的Java類的根包。

所以,如果你有你的控制器在com.myapp.web.controllers然後將其配置如下:

@ComponentScan(basePackages = "com.myapp.web.controllers")