Tutorials  /  Security

Spring RestController: Wie verwendet man es?

Ccentron Redaktion · Januar 2024 ·7 Min. Lesezeit ·Security, Tutorial

Die Spring RestController Annotation ist eine bequeme Annotation, die selbst mit @Controller und @ResponseBody annotiert ist. Diese Annotation wird auf eine Klasse angewendet, um sie als Anfragehandler zu markieren. Die Spring RestController Annotation wird verwendet, um RESTful Web Services mit Spring MVC zu erstellen. Spring RestController kümmert sich um die Zuordnung von Anfragedaten zur definierten Anfragehandler-Methode. Sobald der Antworttext von der Handlermethode generiert wird, konvertiert er ihn in eine JSON- oder XML-Antwort.

Spring RestController Beispiel

Lassen Sie uns sehen, wie einfach wir RestController verwenden können, um einen REST-Webdienst in Spring zu erstellen. Wir werden die Spring Repository-Implementierung wiederverwenden und einen RESTful-Webservice erstellen. Wir werden eine eigenständige Webanwendung erstellen und hier nicht Spring Boot verwenden. Wir werden auch unsere APIs so aussetzen, dass sie sowohl JSON als auch XML in Anfrage und Antwort unterstützen. Das folgende Bild zeigt unsere endgültige Projektstruktur.

Spring RestController Example Project

Modell- und Repository-Klassen werden bereits im Spring Repository Tutorial bereitgestellt. Wir werden uns hier mehr auf die Implementierung von RestController konzentrieren.

Spring RestController Maven-Abhängigkeiten

Lassen Sie uns einen Blick auf die Abhängigkeiten werfen, die benötigt werden, um unser Spring RestController-Beispielprojekt zu erstellen.

Code
<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 JSON-Unterstützung -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.6</version>
</dependency>
<!-- JAXB für XML-Antwort, ab Java 9 explizit zu definieren -->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.0</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>javax.activation-api</artifactId>
    <version>1.2.0</version>
</dependency>

Wir benötigen Spring MVC, Jackson und JAXB Bibliotheken, um sowohl XML- als auch JSON-Anfragen und -Antworten von unserem REST-Webdienst zu unterstützen. Unsere web.xml Datei wird verwendet, um Spring MVC DispatcherServlet als Front-Controller zu konfigurieren. Lassen Sie uns jetzt die Spring Context-Datei ansehen.

Code
<?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" />

    <beans:bean
        />
    <beans:bean
        />

    <beans:bean
       >
        <beans:property name="messageConverters">
            <beans:list>
                <beans:ref bean="jsonMessageConverter" />
                <beans:ref bean="xmlMessageConverter" />
            </beans:list>
        </beans:property>
    </beans:bean>

</beans:beans>

Der wichtigste Teil sind die jsonMessageConverter und xmlMessageConverter Beans, die in der messageConverters-Eigenschaft des RequestMappingHandlerAdapter definiert und gesetzt sind. Das ist alles, was nötig ist, um Spring zu sagen, dass wir wollen, dass unsere Anwendung sowohl JSON als auch XML unterstützt und dass diese Beans für die Umwandlung verwendet werden sollen.

SEC

Passende Infrastruktur bei centron

Absicherung endet nicht beim Server: Cloud Firewalls filtern den Datenverkehr vor der VM – zentral verwaltet, ohne Aufpreis je Regel. Cloud Firewalls ansehen →

Spring RestController Klasse

Hier ist unsere Implementierung der Spring RestController-Klasse.

Go
package com.journaldev.spring.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import com.journaldev.spring.model.Employee;
import com.journaldev.spring.repository.EmployeeRepository;

@RestController
public class EmployeeRestController {

    @Autowired
    private EmployeeRepository repository;
    
    @GetMapping("/rest/employee/get/{id}")
    public Employee getEmployeeByID(@PathVariable("id") int id) {
        return repository.retrieve(id);
    }
    
    @GetMapping("/rest/employee/getAll")
    public List<Employee> getAllEmployees() {
        return repository.getAll();
    }

    @PostMapping("/rest/employee/create")
    public Employee createEmployee(@RequestBody Employee emp) {
        repository.store(emp);
        return emp;
    }
    
    @GetMapping("/rest/employee/search/{name}")
    public Employee getEmployeeByName(@PathVariable("name") String name) {
        return repository.search(name);
    }
    
    @DeleteMapping("/rest/employee/delete/{id}")
    public Employee deleteEmployeeByID(@PathVariable("id") int id) {
        return repository.delete(id);
    }
}

Beachten Sie, dass wir hier nur unsere REST-APIs definiert haben, die gesamte Geschäftslogik ist Teil der Repository-Klasse...

Accept und Content-Type Anfrage-Header

Wir haben unsere REST-Anwendung so konfiguriert, dass sie sowohl mit XML als auch JSON funktioniert. Also wie wird sie wissen, ob die Anfrage XML oder JSON ist, und ob die Antwort im JSON- oder XML-Format gesendet werden soll. Hier kommen die Accept- und Content-Type Anfrage-Header ins Spiel. Content-Type: Definiert den Typ des Inhalts im Anfragekörper, wenn sein Wert “application/xml” ist, dann wird Spring den Anfragekörper als XML-Dokument behandeln. Wenn sein Wert “application/json” ist, wird der Anfragekörper als JSON behandelt. Accept: Definiert den Typ des Inhalts, den der Client als Antwort erwartet. Wenn sein Wert “application/xml” ist, wird eine XML-Antwort gesendet. Wenn sein Wert “application/json” ist, wird eine JSON-Antwort gesendet.

Spring RestController Test

Unsere Anwendung ist bereit für einen Test, ich habe sie auf Tomcat-9 bereitgestellt und teste mit Postman. Unten sind die Testergebnisse mit Erklärung.

Spring RestController GET JSON-Antwort

Spring Rest Controller get json

Es ist eine einfache GET-Anfrage, der wichtige Punkt ist der Wert des “Accept”-Headers.

Spring RestController GET XML-Antwort

Spring Rest get xml

Wenn wir den Wert des “Accept”-Headers auf “application/xml” ändern, erhalten wir eine XML-Antwort.

Spring RestController GET Liste

Lassen Sie uns versuchen, die API aufzurufen, um eine Liste von Mitarbeitern zu erhalten. Wir erhalten eine Liste von Elementen in JSON mit einem anonymen Wurzelelement. Da XML keine anonymen Wurzelelemente unterstützt, erhalten wir eine Ausnahmemeldung.

Spring rest get json list Spring Rest get list xml

Spring RestController POST

Spring RestController POST mit JSON-Anfrage und -Antwort

Spring rest controller post json

Spring RestController POST mit JSON-Anfragekörper

Spring RestController POST request response

Spring RestController POST mit JSON-Anfrage und XML-Antwort

Spring restcontroller post json content type accept xml

Spring RestController DELETE

Spring restcontroller post json content type accept xml Spring rest delete json Spring rest delete xml

Zusammenfassung

Spring RestController hilft uns, uns auf die Geschäftslogik zu konzentrieren, indem er sich um alle Boilerplate-Arbeiten für die Erstellung von REST-Webdienst-APIs kümmert.

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie Security
Teilen
Noch offene Fragen?

Our team will help you with your specific setup - in German or English, by people who run the platform themselves.

War dieses Tutorial hilfreich?

Your answer is stored anonymously and helps us improve our tutorials.

Kommentare

No comments yet - be the first to ask a question about this tutorial.

Sign in to comment

Comments are open to centron customers. Sign in to your account to ask a question about this tutorial.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren