2016-10-10 3 views
0

EDIT: Я понял, что допустил ошибку в своем ComponentScan, как было отмечено многими комментаторами, я изменил его, но он все еще не работает (все еще 404).Контроллеры Spring 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 он находится в пакете 'controller' в каталоге' src', так должен ли он быть «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-код. Он представляет собой корневой пакет классов Java, где Spring должен сканировать весенние бобы.

Так что, если у вас есть свои контроллеры в com.myapp.web.controllers затем настройте его следующим образом:

@ComponentScan(basePackages = "com.myapp.web.controllers") 
Смежные вопросы