2016-10-10 3 views
0

EDIT: Ich erkannte, dass ich einen Fehler in meinem ComponentScan gemacht, wie viele Kommentatoren darauf hingewiesen, ich habe es geändert, aber es funktioniert immer noch (immer noch 404).Spring MVC 4 Controller nicht

Ich habe ein Projekt und ich verwende alle Annotationen-basierte Konfiguration. Hier ist die Konfigurationsdateien:

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[] { "/" }; 
    } 

} 

ich auch eine Persistenz Config haben, aber ich glaube nicht, das ist relevant für dieses Problem. Wie auch immer, hier ist mein Root-Pfad-Controller:

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"; 
    } 
} 

Der Controller nie aufgerufen wird und ich am Ende einen 404 Fehler.

+1

Ich bezweifle, das Basispaket ist benannt 'src' .. –

+0

wenn Sie Ihre Dateien unter' src' fügen Sie dann 'basepackage = "." 'statt – emotionlessbananas

+0

@AsteriskNinja ist es in einem Paket' Controller' unter dem 'src' -Verzeichnis, sollte es also" src.controller "sein? Danke vielmals. – Liumx31

Antwort

0

Können Sie den Namen des Pakets angeben, zu dem 'AuthorController' gehört? Ich denke, Problem ist mit @ComponentScan(basePackages = "src"). Hier sollten Sie den Paketnamen der Controller-Klassen hinzufügen.

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

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

@ComponentScan(basePackages = "com.*") 

Alle oben genannten sind gültige Einträge für ComponentScan Annotation.

+0

Danke für die Antwort, das Paket heißt 'controller' und es ist im' src' Verzeichnis. Also muss 'ComponentScan' wirklich nur das Paket scannen, das die Controller enthält? – Liumx31

+0

Ich habe es in "src.controller" geändert und bekomme immer noch 404. – Liumx31

+0

Bitte versuchen Sie @ComponentScan (basePackages = "Controller") und @ComponentScan (basePackages = "controller. *") – rinoy

0

Die basePackages Eigenschaft der @ComponentScan Annotation stellt nicht den Ordner dar, in dem sich Ihr Java-Code befindet. Es stellt das Root-Paket von Java-Klassen dar, in denen Spring nach Spring-Beans suchen soll.

Also, wenn Sie Ihre Controller in com.myapp.web.controllers haben dann wie folgt konfigurieren:

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