Domyślnie, gdy mamy repozytorium z odsłoniętą metodą składowania, możemy wykonać żądanie PATCH. Następnie REST danych Spring pobiera pierwotny obiekt z bazy danych i stosuje zmiany do encji, a następnie zapisuje je dla nas (w klasie JsonPatchHandler). Pozwala nam to zrobić następującą prośbę do klasySterownik niestandardowy spoczynkowy Data Reszta z metodą łatki - jak połączyć zasoby z jednostką
class Address {
Long id;
String street;
Long houseNumber;
}
patch/api/adresy/1 z ciałem
{ houseNumber: 123 }
i tylko tej jednej dziedzinie zostaną zmienione.
Teraz mający zwyczaj kontroler chcielibyśmy w sposobie aktualizacji odbierać cały obiekt (po hateoas połączyła go z oryginalnego obiektu z DB)
@RepositoryRestController
@ExposesResourceFor(Address.class)
@ResponseBody
@RequestMapping("/addresses")
public class AdddressController {
@PatchMapping("/{addressId}")
public Resource<Address> update(@RequestBody Resource<Address> addressResource, @PathVariable Long addressId) {
Address address= addressResource.getContent();
// .... some logic
address = addressRepository.save(address);
return new Resource<>(address);
}
}
Niestety w miejscu, w którym chciałbym zrobić jakąś logikę Dostaję adres z pustymi polami zamiast połączonego obiektu.
Czy można podłączyć kontroler niestandardowy do stosu REST danych sprężynowych, aby podczas łatania żądania scalić go ze mną (tak jak ma to miejsce w przypadku normalnych repozytoriów)?
edit: chciałbym znaleźć rozwiązanie, które działa w sposób przejrzysty zarówno z patchem (typu zawartości: application/json-łata + json) i łata (Content-Type: application/Hal + json)
Odpowiedziałem na podobne pytanie tutaj - https://stackoverflow.com/questions/33288670/custom-spring-mvc-http-patch-requests-with-spring-data-rest-functionality/33297619#33297619 –
Prawdopodobny duplikat [ Niestandardowe żądania poprawek HTTP HTTP MVC z funkcją Spring Data Rest] (https://stackoverflow.com/questions/33288670/custom-spring-mvc-http-patch-requests-with-spring-data-rest-functionality) –
pytanie jest podobne, niemniej jednak chciałbym znaleźć rozwiązanie, które działa transparentnie zarówno z PATCH (content-type: application/json-patch + json) i PATCH (content-type: application/hal + json) - proponowane przez ciebie może działać tylko z poprawką json –