EMZETT.
Login

Spring Boot Einstieg: REST-API in Java bauen

Kurz: Spring Boot erzeugt mit wenig Konfiguration lauffähige Java-Webanwendungen: Controller beantworten HTTP-Anfragen, Dependency Injection verbindet Bausteine, Spring Data spricht mit der Datenbank.

Genauer: Spring ist das verbreitetste Java-Framework für Server-Anwendungen. Spring Boot liefert sinnvolle Voreinstellungen und einen eingebetteten Server (Tomcat): java -jar app.jar startet die Anwendung.

Im Detail

Projekt anlegen

Auf start.spring.io (Spring Initializr) Maven/Gradle, Java 21, Abhängigkeiten Spring Web, Spring Data JPA, Validation, H2/PostgreSQL wählen und herunterladen. Hauptklasse:

@SpringBootApplication
public class KatalogApp {
    public static void main(String[] args) {
        SpringApplication.run(KatalogApp.class, args);
    }
}

Konfiguration in application.properties/application.yml (Port, Datenbank-URL, Profile dev/prod). Geheimnisse über Umgebungsvariablen, nicht ins Repo.

Controller, Service, Repository

@Entity class Spiel { @Id @GeneratedValue Long id; @NotBlank String titel; double preis; /* Getter/Setter oder record */ }
 
interface SpielRepository extends JpaRepository<Spiel, Long> {
    List<Spiel> findByTitelContainingIgnoreCase(String teil);
}
 
@RestController @RequestMapping("/api/spiele")
class SpielController {
    private final SpielRepository repo;
    SpielController(SpielRepository repo) { this.repo = repo; }   // Dependency Injection
 
    @GetMapping List<Spiel> alle() { return repo.findAll(); }
 
    @GetMapping("/{id}") Spiel eins(@PathVariable Long id) {
        return repo.findById(id).orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
    }
 
    @PostMapping @ResponseStatus(HttpStatus.CREATED)
    Spiel neu(@Valid @RequestBody Spiel s) { return repo.save(s); }
}

Schichten: Controller (HTTP) → Service (Geschäftslogik) → Repository (Daten). DTOs/Records statt Entitäten nach außen geben. Validierung mit @Valid; zentrale Fehlerbehandlung via @RestControllerAdvice.

Wichtige Konzepte

  • Dependency Injection/IoC: Spring erzeugt und verbindet Beans (@Component, @Service, @Repository); Konstruktor-Injection bevorzugen.
  • Spring Data JPA/Hibernate: Repository-Interfaces erzeugen Abfragen aus Methodennamen; N+1-Problem, Lazy Loading beachten; Migrationen mit Flyway/Liquibase statt ddl-auto=update in Produktion.
  • Spring Security: Anmeldung, JWT/OAuth2, CSRF; Standard sperrt zunächst alles.
  • Actuator: Health, Metriken (/actuator/health).
  • Profile (dev/test/prod), Testing (@SpringBootTest, MockMvc, Testcontainers).
  • Logging (SLF4J/Logback), OpenAPI (springdoc).

Praxis und Einordnung

  • Starten ./mvnw spring-boot:run; bauen ./mvnw package → ausführbares JAR → Docker-Image.
  • Sicherheit: Actuator-Endpunkte schützen, Standardpasswörter ändern, Abhängigkeiten aktuell halten (Spring4Shell als Beispiel für Lücken), Eingaben validieren, SQL nur parametrisiert.
  • Alternativen: Quarkus, Micronaut, Jakarta EE; außerhalb Java: FastAPI, Express, ASP.NET.
  • Lernpfad: Java-Grundlagen → Maven/Gradle → REST-Grundlagen → Spring Boot → Datenbank (JPA) → Tests → Security → Docker.
  • Prüfung/Projekt: Schichtenarchitektur und REST-Prinzipien begründen, Tests dokumentieren.

Siehe auch: Maven und Gradle, JUnit 5 und Mockito, REST-API-Design