Spring data REST: nadpisywanie metody repozytorium na kontrolerze
Mam następujące repozytorium REST, którego implementacja jest generowana w czasie wykonywania przez Spring.
@RepositoryRestResource
public interface FooRepository extends CrudRepository<Foo, Long> {}
Oznacza to, że będę miał save (), find (), exist () i inne metody dostępne i ujawnione przez REST.
Teraz chciałbym zmienić jedną z metod; na przykład save (). Aby to zrobić, utworzyłbym kontroler, który ujawnia tę metodę, na przykład:
@RepositoryRestController
@RequestMapping("/foo")
public class FooController { @Autowired
FooService fooService;
@RequestMapping(value = "/{fooId}", method = RequestMethod.PUT)
public void updateFoo(@PathVariable Long fooId) {
fooService.updateProperly(fooId);
}}
Problem:
jeśli włączę ten kontroler, wszystkie inne metody zaimplementowane przez Spring nie będą już dostępne. Na przykład nie mogę już wysłać żądania GET do/foo/1
Pytanie:
czy istnieje sposób na przesłonięcie metod REST przy jednoczesnym zachowaniu innych automatycznie generowanych metod Spring?
Dodatkowe informacje
:
- To pytanie wydaje się być bardzo podobne: Spring Data Rest: przesłanianie metody w RestController tą samą ścieżką mapowania żądań https://coderoad.ru/28455208/... ale nie chcę zmieniać ścieżki na coś takiego jak/foo/1/save
- Myślałem, że użyję @RepositoryEventHandler, ale nie podoba mi się ten pomysł, ponieważ chciałbym zamknąć go w usłudze. Wydaje się również, że tracisz kontrolę nad kontekstem transakcji.
- W tej części dokumentacji danych http://docs.spring.io/spring-d ... dlersWiosna mówi, co następuje: Czasami może być konieczne napisanie niestandardowego programu obsługi dla określonego pliku ratunek. Aby skorzystać z dostosowań Spring Data REST, konwertery wiadomości, obsługa wyjątków i nie tylko Adnotacja @RepositoryRestController zamiast standardowego Spring MVC @Controller lub @RestController
więc wygląda na to, że powinno to działać po wyjęciu z pudełka, ale niestety tak nie jest.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
4 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Przyjrzyj się bliżej przykładowi w dokumentacji: chociaż wyraźnie nie zabrania on dopasowywania zapytań na poziomie klasy, używa dopasowywania zapytań na poziomie metody.
Nie jestem pewien, czy jest to pożądane zachowanie, czy błąd, ale o ile wiem, jest to jedyny sposób, aby działało zgodnie z opisem
tutaj
https://jira.spring.io/browse/DATAREST-535
.
Po prostu zmień kontroler na:
Anonimowy użytkownik
Potwierdzenie od:
Dzięki ujawniając swoje punkty końcowe CRUD do :
I , który zastępuje domyślny kształt punktu końcowego .:
Jeśli zadzwonisz do , otrzymasz następujące dane wyjściowe, które wykorzystują układ implementacji:
Aby uzyskać kompletność, POM można skonfigurować za pomocą następujących elementów nadrzędnych i zależności:
Anonimowy użytkownik
Potwierdzenie od:
Jak wspaniale powiedział @ mathias-dpunkt w tej odpowiedzi
https://stackoverflow.com/a/34518166/2836627
https://stackoverflow.com/a/34518166/2836627Najważniejsze, co RepositoryRestController wie o wiosennym odpoczynku danych
podstawowa ścieżka i będzie obsługiwana pod tą ścieżką podstawową.
Więc jeśli twoja podstawowa ścieżka to „/ api” i używasz @RepositoryRestController
musisz pominąć „/ api” w @RequestMapping
Anonimowy użytkownik
Potwierdzenie od: