In der Welt der Java-Entwicklung stößt man früher oder später auf den Begriff DTO – kurz für Data Transfer Object. Gerade in größeren Anwendungen oder beim Arbeiten mit Daten aus Datenbanken, REST-Schnittstellen oder Microservices ist es ein häufig verwendetes Muster. Doch was genau ist ein DTO, warum braucht man es, und wie unterscheidet es sich von anderen Objekten wie POJOs oder Java Records?
DTO steht für Data Transfer Object. Es handelt sich um ein einfaches Java-Objekt, das nur Daten enthält, ohne jegliche Logik. Es wird verwendet, um strukturierte Informationen von einer Schicht zur anderen zu transportieren – z. B. vom Backend zur UI, zwischen Services oder über das Netzwerk hinweg.
Das besondere ist, dass ein DTO nur aus Feldern (also Variablen) besteht sowie die entsprechenden Getter und Setter und keine Abhängigkeiten zu Services oder Datenbankklassen hat.
Beispiel für ein DTO:
public class UserDTO {
private String name;
private String email;
public UserDTO() {}
public UserDTO(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Dieses Objekt ist ein typisches DTO – es enthält nur Daten und keinerlei Business-Logik.
DTOs sind sinnvoll, wenn du:
Ein POJO (Plain Old Java Object) ist ein ganz allgemeines, einfaches Java-Objekt. Ein DTO ist ein POJO – aber nicht jedes POJO ist ein DTO.
Beispiel für ein POJO mit Logik:
public class Product {
private double price;
private double taxRate;
public double getGrossPrice() {
return price * (1 + taxRate);
}
// Getter & Setter ...
}
Dieses Objekt enthält Logik (Berechnung des Brutto-Preises) – es ist also kein reines DTO, sondern ein Domänenobjekt oder Modell.
Seit Java 14 (Preview) und stabil ab Java 16 gibt es Records – eine neue Art, einfache Datencontainer zu schreiben.
public record UserDTO(String name, String email) {}
Das entspricht funktional dem ersten DTO oben – nur viel kompakter!
DTOs helfen dir, deine Architektur klarer, sicherer und flexibler zu gestalten. Auch wenn sie etwas mehr Schreibarbeit verursachen, lohnt sich ihr Einsatz bei:
Wenn du einfache DTOs brauchst, die nicht verändert werden sollen, sind Records eine elegante Lösung.