Hallo,
Ich arbeite gerade an einem API Backend mit Spring Boot. Mein Modell sieht folgendermaßen aus:
- es gibt Gesellschaften (Company)
- und es gibt Werke (Plant)
- eine Gesellschaft kann mehrere Werke haben und ein Werk kann nur einer Gesellschaft gehören
- im Company Entity gibt es kein List of Plants, weil diese nicht benötigt wird, nur der Verweis im Plant zu einer Gesellschaft
Für die API benutze ich DTOs.
Jetzt möchte ich folgendes Post-Request für ein Plant validieren:
Das ist ein valider Request.
Dazu habe ich folgendes DTO:
Ich habe gelesen, wenn ich nested Objekte validieren möchte, muss ich das @Valid Annotation benutzen.
Hier noch der Code im Controller:
Ich habe damit zwei Probleme:
- wenn ich @Valid vor Company setze, wird das nested Objekt nicht validiert; warum? Ich lese überall, dass das so funktionieren sollte.
- eigentlich möchte ich nur das id Property vom Company in dem Fall validieren; wie bekomme ich das hin?
Mit "nicht validiert" meine ich, dass ich ein ExceptionHandler habe, was Validierungsfehler abfängt und ein custom HttpResponse zurückgibt. Aber diese bekomme ich nicht zurück, obwohl z. B. der Name vom Company fehlt.
Danke für jegliche Hilfe.
Ich arbeite gerade an einem API Backend mit Spring Boot. Mein Modell sieht folgendermaßen aus:
- es gibt Gesellschaften (Company)
- und es gibt Werke (Plant)
- eine Gesellschaft kann mehrere Werke haben und ein Werk kann nur einer Gesellschaft gehören
- im Company Entity gibt es kein List of Plants, weil diese nicht benötigt wird, nur der Verweis im Plant zu einer Gesellschaft
Für die API benutze ich DTOs.
Jetzt möchte ich folgendes Post-Request für ein Plant validieren:
JSON:
{
"code": "1Y0",
"location": "Nowhere",
"company": {
"id":8
}
}
Das ist ein valider Request.
Dazu habe ich folgendes DTO:
Java:
public class PlantDto {
@NotNull(groups = Existing.class)
@JsonProperty("id")
private Long id;
@NotEmpty(groups = {New.class, Existing.class})
@JsonProperty("code")
private String code;
@NotEmpty(groups = {New.class, Existing.class})
@JsonProperty("location")
private String location;
@NotNull(groups = {New.class, Existing.class})
@JsonProperty("company")
private Company company;
}
Ich habe gelesen, wenn ich nested Objekte validieren möchte, muss ich das @Valid Annotation benutzen.
Hier noch der Code im Controller:
Java:
@PostMapping
public ResponseEntity<Long> addNewPlant(@Validated(New.class) @RequestBody PlantDto plantDto) {
Long newId = plantService.addNew(plantMapper.toEntity(plantDto));
return new ResponseEntity<>(newId, HttpStatus.OK);
}
Ich habe damit zwei Probleme:
- wenn ich @Valid vor Company setze, wird das nested Objekt nicht validiert; warum? Ich lese überall, dass das so funktionieren sollte.
- eigentlich möchte ich nur das id Property vom Company in dem Fall validieren; wie bekomme ich das hin?
Mit "nicht validiert" meine ich, dass ich ein ExceptionHandler habe, was Validierungsfehler abfängt und ein custom HttpResponse zurückgibt. Aber diese bekomme ich nicht zurück, obwohl z. B. der Name vom Company fehlt.
Danke für jegliche Hilfe.
Zuletzt bearbeitet: