2016-07-07 7 views
1

Ich habe bisher zwei Controller in meiner Anwendung. Sie sind beide mit @Controller gekennzeichnet, aber nur einer von ihnen hat eine Hauptfunktion. Wenn ich die Anwendung starte, wird nur die Klasse mit der Hauptfunktion im Browser angezeigt. Wenn ich zu der URL der Klasse ohne Hauptfunktion gehe, bekomme ich nur einen Fehler 404 "nicht gefunden".Wie werden mehrere Controller in einer Spring Boot-Anwendung ausgeführt?

Die Klasse mit einer Hauptfunktion ist:

@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); 
    } 
} 

Wenn ich schreibe localhost: 8080/Funktion/Test funktioniert diese Klasse

jedoch in Ordnung, die andere Klasse:

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

funktioniert leider nicht. Wenn ich zum Browser gehe und localhost schreibe: 8080/index bekomme ich den 404: not found-error.

Es scheint nur der Controller mit der Hauptfunktion erkannt zu werden. Weiß jemand, was zu tun ist, um das zu beheben?

+1

Sie sollten mehrere Klassen der Lage sein, passieren auf die run-Methode wie diese haben sollte .Klasse}; SpringApplication.run (Quellen, Argumente); – Matt

+0

Danke! Das sollte funktionieren: D – user3257736

Antwort

2

Ich denke, Sie sollten die Hauptmethode, die SpringApplication in einer anderen Klasse startet. Dann können Sie so viele Controller haben, wie Sie wollen, jeder in einer neuen Klasse.

Edit: Versuchen Sie es hier setzen @ResponseBody:

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

Wenn Sie auf localhost gehen: 8080/index/Sie sollte den Text "Index" auf Ihrer Seite sehen, ob Ihr Controller funktioniert.

+0

Vielen Dank! : D – user3257736

+0

@ L01c ResponseBody ist nur, wenn Sie ein JSON-Objekt zurückgeben möchten, wenn Sie eine Sicht zurückgeben wollen – cralfaro

+0

Ja, aber ein Fehler 404 bedeutet, dass die Seite nicht gefunden werden kann. Durch Testen mit ResponseBody können Sie feststellen, ob Ihr Mapping korrekt ist. – L01c

0

Wenn Sie Spring Web MVC programmieren, sollten Sie Ansicht Löser wie folgt konfiguriert werden:

<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> 

Im Ordner WEB-INF/Ansichten/jsp, sollten Sie eine JSP-Datei "index.jsp" erstellen.

Sie können Spring MVC in der Website studieren: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html

+0

Vielen Dank für die Antwort! Ich werde dies auch überprüfen :) obwohl das Problem jetzt gelöst ist – user3257736

3

Sie benötigen Code bestellen zuerst:

  1. Die Application-Klasse, wo Sie Ihre Haupt-Methode haben und alle Komponenten laufen.
  2. Wie viele Controller, wie Sie benötigen, aber die Art und Weise Frühling behandeln diese Steuerungen ist die nächste

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

Die jetzt können Sie

http://localhost:8080/mainLogicSecondController/specifcSecondController

oder

nennen http://localhost:8080/mainLogicFirstController/specifcFirstController

Auch könnten Sie die gleiche Anfrage Zuordnungen für jeden Controller verwenden, wenn sinnvoll für Ihre Business-Logik, wie:

/clients/showlist 
/users/showlist 

Und was ich lese über @ResponseBody in der vorherige Antwort, dass Anmerkung ist nur in Falls Sie ein JSON Objekt zurückgeben möchten.

Ich hoffe, die

+1

@ user3257736 werfen Sie einen Blick auf diese Antwort, vielleicht klären Sie ein wenig mehr Ihre Zweifel – cralfaro

+0

Vielen Dank! :) Ich werde es überprüfen und das auch lernen – user3257736

1

die Anwendungsklasse ein wenig mehr Ihre Idee über Spring MVC klären (die Hauptmethode hat) in den äußeren meisten Ordner in Ihrer Quellhierarchie sein sollte, denn das ist, wo die Komponente Scan beginnt. Wenn Sie einen Controller haben, der eine Ebene außerhalb des Controllers hat, kann die Feder diesen Controller während des Komponentenscan nicht auswählen. Object [] Quellen = {IndexController.class, Funktionen:

Ihr src Ordner eine Verzeichnisstruktur wie diese

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

Verwandte Themen