Eines der Probleme ist die magische Konvertierung von Anforderungskörperparametern in ein Java-Objekt (Entität) mit der Annotation @RequestBody.
Siehe das folgende Beispiel
Code: Select all
@PostMapping
public User create(@RequestBody User user) {}
@PutMapping
public User update(@RequestBody User user) {}
Der Benutzer Entität kann viele Felder und Assoziationen haben, z. B.
Code: Select all
{
"name": "John Doe",
"age": 33,
"email": "[email protected]",
"addresses": [{
"street": "XYZ Main St",
"city": "Test City",
"zip": "12345"
}]
}
Gleichzeitig benötige ich möglicherweise einen anderen Controller für Administratoren, der alle oben gezeigten Benutzer-Felder und -Zuordnungen festlegen/ändern kann.
Wie Kann ich steuern, was in den Anfragetext kommt und wie ein Benutzerdatensatz aussieht? initialisiert?
Ich weiß, dass ich Dinge wie UserDto:
verwenden kann
Code: Select all
public class UserDTO {
private String name;
private Integer age;
}
// Controller
@PostMapping
public User create(@RequestBody UserDto userDto) {}
Code: Select all
User
Oder sollte ich Validierungsregeln sowie Felder definieren? setzt in DTOs?
Und sollte ich DTOs für alle möglichen Endpunkte und Geschäftsfälle erstellen, z. B.
Code: Select all
public class UserDTO {
private String name;
private Integer age;
}
public class AdminUserDTO {
private String name;
private Integer age;
private String email;
private List addresses;
}
Kann ich explizit eine Liste der zulässigen Parameter angeben?
Gibt es eine Möglichkeit anzugeben, welche Parameter erforderlich und welche optional sind?