2015-08-10 10 views
7

Używam Spring-data-rest, aby zapewnić odczytywanie interfejsów API nad niektórymi jednostkami JPA. Dla zapisów muszę wydać obiekty poleceń zamiast bezpośrednio napisać do DB, więc dodałem kontroler niestandardowego za pomocą @RepositoryRestController i różne metody manipulacji polecenie:Wypełnianie encji w niestandardowych metodach @RepositoryRestController

@RequestMapping(method = RequestMethod.POST) 
public @ResponseBody MyEntity post(@RequestBody MyEntity entity) { 
    String createdId = commands.sendAndWait(new MyCreateCommand(entity)); 
    return repo.findOne(createdId); 
} 

chciałbym wyjście być wzbogacone jak każdy inny odpowiedź przez kontroler spoczynkowych danych źródłowych, w szczególności chcę dodać HATEOAS do siebie i jego relacji.

Odpowiedz

11

To było ostatnio answered (patrz punkt 3) sam przez się Oliver Gierke (pytanie używane różne słowa kluczowe, więc nie oznaczę tego jako duplikat).

Przykład dla jednego podmiotu staną:

@RequestMapping(method = RequestMethod.POST) 
public @ResponseBody PersistentEntityResource post(@RequestBody MyEntity entity, 
    PersistentEntityResourceAssembler resourceAssembler)) { 
    String createdId = commands.sendAndWait(new MyCreateCommand(entity)); 
    return resourceAssembler.toResource(repo.findOne(createdId)); 
} 

przykład dla non-ponumerowanym ofertę:

@RequestMapping(method = RequestMethod.POST) 
public @ResponseBody Resources<PersistentEntityResource> post(
    @RequestBody MyEntity entity, 
    PersistentEntityResourceAssembler resourceAssembler)) { 
    List<MyEntity> myEntities = ... 
    List<> resources = myEntities 
     .stream() 
     .map(resourceAssembler::toResource) 
     .collect(Collectors.toList()); 
    return new Resources<PersistentEntityResource>(resources); 
} 

Wreszcie na wywoływana odpowiedzi należy użyć wstrzykuje PagedResourcesAssembler, przechodząc w metodach wstrzykniętych ResourceAssembler i Page, zamiast tworzenia zasobów. Więcej informacji na temat korzystania z PersistentEntityResourceAssembler i PagedResourcesAssembler można znaleźć w this answer. Zauważ, że w tej chwili wymaga to używania typów surowych i odznaczonych rzutów.

Może jest miejsce na automatyzację, lepsze rozwiązania są mile widziane.

P.S .: Stworzyłem również JIRA ticket, aby dodać to do dokumentacji Spring Data.

+0

byłby to bardziej szczegółowy przykład opcji 3 Gierke: http://stackoverflow.com/a/29924387/1938607? –

+0

Dokładnie zaktualizowałem swoją odpowiedź. – hzpz

+0

Brakuje jeszcze kilku ważnych bitów: 1) w jaki sposób uzyskuje się od "MyEntity" do "PersistentEntityResource". 2) Przykład skierowany do zbioru stronicowanego, dla pojedynczego podmiotu proces jest inny. Sam spróbuję rozwiązać te problemy. –