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