2016-09-15 4 views
0

моя проблема в том, что я не знаю, как указать путь для моего пакета Controller для поиска запросов, связанных с аннотациями внутри него в аннотации @componenscan, которая находится в основном классе.Использование @Componenscan в SpringBoot Spring MVC Application

Структура проекта: enter image description here

Мой класс DemoApplication:

package com.personalitymeet; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 

@Configuration 
@EnableAutoConfiguration 
@ComponentScan() 
@Controller 
public class DemoApplication { 

@ResponseBody 
@RequestMapping("/") 
String entry(){ 
    return "bla"; 
} 
public static void main(String[] args) { 
    SpringApplication.run(DemoApplication.class, args); 
} 
} 

Usercontroller.java:

package com.personalitymeet.web; 

import com.personalitymeet.domain.User; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.RequestMapping; 

/** 
* Created by mv on 15.09.2016. 
*/ 

@Controller 
public class UserController { 

    @RequestMapping("/user") 
    public String user(Model model){ 
     User user = new User(); 
     user.setFirstname("Misi"); 
     user.setLastname("Varga"); 
     model.addAttribute("user",user); 
     return "userview"; 
    } 

} 

Итак, мой вопрос, как я могу сказать springboots, что он должен искать для аннотации @Requestmapping в классе Usercontroller?

+0

@EnableWebMvc сделать трюк – Jens

+0

Добавьте свой файл градиента. –

ответ

1

Вы можете указать сканирование компонентов в файл конфигурации для сканирования папки com.personalitymeet и автоматически выбрать все классы с соответствующими аннотациями.

Ниже приведены основные 3 аннотации, необходимые для запуска приложения.

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = "com.personalitymeet") 
+1

С помощью Spirng Boot вам не нужно '@ EnableWebMvc'. –

0

Ваша проблема не @ComponentScan, который будет искать в com.personalitymeet и все подпакеты. Это связано с тем, что у вас нет инфраструктуры MVC.

Вы должны иметь spring-boot-starter-web в качестве зависимости в вашем файле build.gradle, и вы должны добавить @EnableWebMvc в свой класс конфигурации.

+0

Это в моем Gradle файла: зависимости { \t компиляции ('org.springframework.boot: весна-загрузка-стартер-данные JPA') \t компиляции ('org.springframework.boot: весна-загрузка starter- паутина ') \t выполнения (' com.h2database: h2 ') \t testCompile (' org.springframework.boot: весна-загрузки-стартер-тест ") } –

+0

только добавив зависимость должна быть достаточно ... Spring загрузочный обнаруживает и автоматически добавляет классы конфигурации @ @ EnableWebMvc. Если это не так, вам не нужны зависимости. –

+0

Если вы используете Spring Boot, добавление '@ EnableWebMvc' почти наверняка является плохой идеей.Он отключит всю конфигурацию Spring Spring от Spring MVC. –

0

Вы можете заменить этот код:

@Configuration 
@EnableAutoConfiguration 
@ComponentScan() 
@Controller 
public class DemoApplication { 
... 

С помощью этого кода:

@SpringBootApplication 
@Controller 
public class DemoApplication { 
... 

Настройки приложения разоблачить конечные точки управления:

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#production-ready 

, а затем нажмите эту конечную точку см. конечную точку, открытую приложением:

http://localhost:[port]/manage/mappings 

Кроме того, я рекомендую создать отдельный контроллер для корня, чтобы ваш класс запуска не был заполнен логикой приложения.

Смежные вопросы