Spring Controller und RestController Anleitung

Einführung in den Spring Controller

Die Spring Controller Annotation ist eine Spezialisierung der @Component Annotation. Sie wird typischerweise in Kombination mit annotierten Handlermethoden verwendet, die auf der RequestMapping-Annotation basieren.

Spring Controller

Die Spring Controller Annotation kann nur auf Klassen angewendet werden. Sie wird verwendet, um eine Klasse als Handler für Webanfragen zu kennzeichnen. Sie wird meistens in Spring MVC-Anwendungen verwendet.

Spring RestController

Spring @RestController ist eine praktische Annotation, die selbst mit @Controller und @ResponseBody annotiert ist. Diese Annotation wird verwendet, um eine Klasse als Request Handler für REST-basierte Webdienste zu kennzeichnen.

Beispiel für Spring Controller

Lassen Sie uns eine einfache Spring-Anwendung erstellen, in der wir sowohl einen Standard-MVC-Controller als auch einen REST-Controller implementieren. Erstellen Sie ein „Dynamic Web Project“ in Eclipse und konvertieren Sie es dann in ein Maven-Projekt. Dadurch erhalten wir eine maven-basierte Webanwendungsstruktur, auf der wir unsere Anwendung aufbauen können. Das folgende Bild zeigt die endgültige Projektstruktur unserer Spring MVC Controller-Anwendung.

Wir benötigen folgende Abhängigkeiten für unsere Anwendung.

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.0.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.0.7.RELEASE</version>
</dependency>

<!-- Jackson für REST -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.6</version>
</dependency>

Schauen wir uns den Bereitstellungsdeskriptor (web.xml) an, wo wir den DispatcherServlet Servlet als Frontcontroller konfigurieren werden.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://xmlns.jcp.org/xml/ns/javaee" 
 xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Spring-Controller</display-name>
  <!-- Fügen Sie Spring MVC DispatcherServlet als Frontcontroller hinzu -->
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
               <param-name>contextConfigLocation</param-name>
               <param-value>/WEB-INF/spring-servlet.xml</param-value>
            </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern> 
    </servlet-mapping>
</web-app>

Schließlich haben wir die folgende Spring-Kontextdatei. Hier konfigurieren wir unsere Anwendung als annotierungsbasiert und geben das Stammpaket für das Scannen von Spring-Komponenten an. Wir konfigurieren auch den InternalResourceViewResolver-Bean und geben Details zu den Ansichtsseiten an.

        <?xml version="1.0" encoding="UTF-8"?>
        <beans:beans xmlns="https://www.springframework.org/schema/mvc"
            xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:beans="https://www.springframework.org/schema/beans"
            xmlns:context="https://www.springframework.org/schema/context"
            xsi:schemaLocation="https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
                https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
                https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

            <!-- Aktiviert das Spring MVC @Controller Programmiermodell -->
            <annotation-driven />

            <context:component-scan base-package="com.journaldev.spring" />

            <!-- Löst Ansichten, die von @Controllers zur Darstellung ausgewählt wurden, zu JSP-Ressourcen
                im Verzeichnis /WEB-INF/views auf -->
            <beans:bean
                class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <beans:property name="prefix" value="/WEB-INF/views/" />
                <beans:property name="suffix" value=".jsp" />
            </beans:bean>

        </beans:beans>

Konfiguration der Controller-Klasse

Unsere Konfigurations-XML-Dateien sind bereit, lasst uns nun zur Controller-Klasse übergehen.

        package com.journaldev.spring.controller;

        import java.text.DateFormat;
        import java.util.Date;
        import java.util.Locale;

        import org.springframework.stereotype.Controller;
        import org.springframework.ui.Model;
        import org.springframework.web.bind.annotation.GetMapping;

        @Controller
        public class HomeController {

            @GetMapping("/hello")
            public String home(Locale locale, Model model) {
                Date date = new Date();
                DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
                String formattedDate = dateFormat.format(date);
                model.addAttribute("serverTime", formattedDate);
                return "home";
            }

        }

Konfiguration der Spring-Kontextdatei

Schließlich haben wir die folgende Spring-Kontextdatei. Hier konfigurieren wir unsere Anwendung als annotierungsbasiert und geben das Stammpaket für das Scannen von Spring-Komponenten an. Wir konfigurieren auch den InternalResourceViewResolver-Bean und geben Details zu den Ansichtsseiten an.

        <?xml version="1.0" encoding="UTF-8"?>
        <beans:beans xmlns="https://www.springframework.org/schema/mvc"
            xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:beans="https://www.springframework.org/schema/beans"
            xmlns:context="https://www.springframework.org/schema/context"
            xsi:schemaLocation="https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
                https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
                https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

            <!-- Aktiviert das Spring MVC @Controller Programmiermodell -->
            <annotation-driven />

            <context:component-scan base-package="com.journaldev.spring" />

            <!-- Löst Ansichten, die von @Controllers zur Darstellung ausgewählt wurden, zu JSP-Ressourcen
                im Verzeichnis /WEB-INF/views auf -->
            <beans:bean
                class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <beans:property name="prefix" value="/WEB-INF/views/" />
                <beans:property name="suffix" value=".jsp" />
            </beans:bean>

        </beans:beans>

Implementierung des Spring MVC Controllers und REST Controllers

Unsere Konfigurations-XML-Dateien sind bereit, lasst uns nun zur Controller-Klasse übergehen.


        package com.journaldev.spring.controller;

        import java.text.DateFormat;
        import java.util.Date;
        import java.util.Locale;

        import org.springframework.stereotype.Controller;
        import org.springframework.ui.Model;
        import org.springframework.web.bind.annotation.GetMapping;

        @Controller
        public class HomeController {

            @GetMapping("/hello")
            public String home(Locale locale, Model model) {
                Date date = new Date();
                DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
                String formattedDate = dateFormat.format(date);
                model.addAttribute("serverTime", formattedDate);
                return "home";
            }

        }


Wir haben eine einzelne Request-Handler-Methode definiert, die GET-Anfragen mit der URI „/hello“ akzeptiert und die Seite „home.jsp“ als Antwort zurückgibt. Beachten Sie, dass wir ein Attribut zum Modell hinzufügen, das auf der Seite home.jsp verwendet wird. Hier ist unser einfacher Code für die Seite home.jsp.

        <%@ page language="java" contentType="text/html; charset=UTF-8"
            pageEncoding="UTF-8"%>
        <html>
        <head>
        <title>Home</title>
        </head>
        <body>
            <h1>Hallo Welt!</h1>

            <p>Die Serverzeit ist ${serverTime}.</p>

        </body>
        </html>

Test des Spring MVC Controllers

Unsere herkömmliche, auf Servlets basierende Spring MVC-Anwendung mit einem einfachen Controller ist fertig. Exportieren Sie sie einfach als WAR-Datei und deployen Sie sie auf Tomcat oder einem anderen Servlet-Container. Gehen Sie dann zur URL https://localhost:8080/Spring-Controller/hello und Sie sollten folgenden Bildschirm als Ausgabe sehen.

Beispiel für Spring RestController

Jetzt erweitern wir unsere Anwendung, um auch REST-APIs anzubieten. Erstellen Sie eine Modellklasse, die als JSON-Antwort gesendet wird.

package com.journaldev.spring.model;

public class Person {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
}

Hier ist unsere einfache REST-Controller-Klasse.

package com.journaldev.spring.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.journaldev.spring.model.Person;

@RestController
public class PersonRESTController {

    @RequestMapping("/rest")
    public String healthCheck() {
        return "OK";
    }

    @RequestMapping("/rest/person/get")
    public Person getPerson(@RequestParam(name = "name", required = false, defaultValue = "Unbekannt") String name) {
        Person person = new Person();
        person.setName(name);
        return person;
    }

}

Setzen Sie das Deployment der Anwendung erneut ein, um unsere REST-APIs zu testen.

Test des Spring REST Controllers

Gehen Sie zur URL https://localhost:8080/Spring-Controller/rest und Sie sollten folgende Ausgabe erhalten.

Gehen Sie zur URL https://localhost:8080/Spring-Controller/rest/person/get und Sie erhalten folgende JSON-Antwort.

Geben Sie jetzt den Namen als Parameterwert in der URL an, gehen Sie zu https://localhost:8080/Spring-Controller/rest/person/get?name=Pankaj und Sie erhalten folgende JSON-Antwort.

Zusammenfassung

Der Spring Controller ist das Rückgrat von Spring MVC-Anwendungen. Hier beginnt unsere Anleitung. Darüber hinaus erleichtert uns der RestController das Erstellen von REST-basierten Webdiensten.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren:

centron Managed Cloud Hosting in Deutschland

JSP Exception Handling – Leitfaden

Apache
JSP Exception Handling – Tutorial Um Ausnahmen zu behandeln, die von der JSP-Seite geworfen werden, benötigen wir lediglich eine Fehlerseite und definieren die Fehlerseite in JSP mit der JSP-Seitendirektive. Content1…
centron Managed Cloud Hosting in Deutschland

JUnit Setup Maven – Leitfaden

Apache
[uncode_block id=“14327″][uncode_block id=“14372″ inside_column=“yes“]JUnit Setup Maven – Leitfaden JUnit 4 und JUnit 5 sind komplett unterschiedliche Frameworks. Sie dienen beide demselben Zweck, aber JUnit 5 ist ein komplett neu geschriebenes…
centron Managed Cloud Hosting in Deutschland

JUnit HTML Report – Leitfaden

Apache
JUnit HTML Report – Leitfaden Wenn wir das maven-surefire-plugin konfigurieren, um unsere JUnit-Tests auszuführen, wird das Verzeichnis surefire-reports erstellt. Dieses Verzeichnis enthält eine txt-Datei und eine XML-Datei für jede Testklasse.…