2016-07-07 3 views
1

У меня есть два контроллера до сих пор в моем приложении. Они оба аннотируются с помощью @Controller, но только одна из них имеет основную функцию. Когда я запускаю приложение, в браузере появляется только класс с основной функцией. Когда я перехожу к URL-адресу класса без основной функции, я просто получаю 404 «не найденную» ошибку.Как запустить несколько контроллеров в приложении Spring Boot?

Класс с основной функцией является:

@Controller 
@RequestMapping("function") 
public class Functions { 
    @RequestMapping("test") 
    public String test(){ 
     return "this is a test"; 
    } 

    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Functions.class, args); 
    } 
} 

Когда я пишу локальный: 8080/функция/тест, этот класс работает отлично

Однако другой класс:

@Controller 
@RequestMapping("index") 
public class IndexController { 
    @RequestMapping("/") 
    public String getHomePage(){ 
     return "index"; 
    } 
} 

, к сожалению, не работает. Когда я иду в браузер и пишу localhost: 8080/index, я получаю 404: not found-error.

Кажется, что только контроллер с основной функцией распознается. Кто-нибудь знает, что делать, чтобы исправить это?

+1

Вы должны быть в состоянии пройти несколько классов методу выполнения, как это: Object [] Источники = {IndexController.class, функции .класс}; SpringApplication.run (источники, args); – Matt

+0

Спасибо! Это должно работать: D – user3257736

ответ

2

Я думаю, вы должны поместить основной метод, который запускает SpringApplication в другом классе. Тогда вы можете иметь столько контроллеров, сколько хотите, каждый в новом классе.

Edit: Попробуйте поставить @ResponseBody здесь:

@RequestMapping("/") 
@ResponseBody 
public String getHomePage(){ 
    return "index"; 
} 

Когда вы идете на локальном хосте: 8080/Индекс/Вы должны увидеть текст «индекс» в вашей странице, если контроллер работает.

+0

Большое вам спасибо! : D – user3257736

+0

@ L01c ResponseBody - это просто, когда вы хотите вернуть объект JSON, если вы хотите вернуть представление – cralfaro

+0

Да, но ошибка 404 означает, что страница не найдена. При тестировании с помощью ResponseBody это поможет вам узнать, правильно ли выполнено сопоставление. – L01c

0

Если вы программируете весной веб MVC, вы должны настроить вид решатель следующим образом:

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd "> 
<mvc:resources mapping="/resources/**" location="/resources/" /> 

<bean 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" 
     value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/views/jsp/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 
</beans> 

В папке WEB-INF/просмотров/JSP, вы должны создать файл JSP "index.jsp".

Вы можете изучить Spring MVC на сайте: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html

+0

Спасибо за ответ! Я тоже это проверю :) хотя проблема решена сейчас – user3257736

3

Вам нужно заказать код первого:

  1. Класс Application, где у вас есть основной метод и запустить все компоненты.
  2. Поскольку многие контроллеры, как вам нужно, но способ Spring обработки этих контроллеров является следующим

    @Controller 
    @RequestMapping("/mainFirstController") 
    public class FirstController { 
    
        @RequestMapping("/specifcFirstController") 
        public String getView(){} 
    } 
    ... 
    
    @Controller 
    @RequestMapping("/mainLogicSecondController") 
    public class FirstController { 
    
        @RequestMapping("/specifcSecondController") 
        public String getView(){} 
    
    } 
    

Ныне вы можете позвонить

http://localhost:8080/mainLogicSecondController/specifcSecondController

или

http://localhost:8080/mainLogicFirstController/specifcFirstController

Даже вы можете использовать одни и те же запрос отображения для каждого контроллера, если имеет смысл для бизнес-логики, как:

/clients/showlist 
/users/showlist 

А что я читал о @ResponseBody в предыдущем ответе, что аннотацию только в случай, который вы хотите вернуть JSON объект.

Я надеюсь, что это прояснить немного больше ваша идея о Spring MVC

+1

@ user3257736 взгляните на этот ответ, возможно, уточните немного больше своих сомнений – cralfaro

+0

Спасибо! :) Я проверю это и узнаю, что – user3257736

1

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

Папка ЦСИ должна иметь структуру каталогов, как этот

com.example.demo | +-> controller | | | +--> Controller1.java | +--> Controller2.java | +-> Application.java

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