2016-10-19 7 views
6

Używam skryptu startowego-rozruchowego-rodzica 1.4.1.RELEASE.Czy istnieje sposób zwracania obiektów skojarzenia o identyfikatorze w spoczynku danych sprężynowych bez Projekcji

  1. Wiosenny rozruch @ResponseBody nie jest serializacją identyfikatora jednostki domyślnie.

Jeśli użyć exposeIdsFor zwraca Kod ale trzeba skonfigurować to dla każdej klasy

np

RepositoryRestConfiguration.exposeIdsFor (User.class); RepositoryRestConfiguration.exposeIdsFor (Address.class);

Czy istnieje prostsza konfiguracja, aby to zrobić bez konfigurowania każdej klasy encji.

Patrz: https://jira.spring.io/browse/DATAREST-366

  1. REST zasobów uczyni atrybut jako URI to odpowiednia powiązana zasobu. Musimy zwrócić powiązany obiekt zamiast identyfikatora URI.

Jeśli używam Projekcja, będzie zwraca związane obiektów, ale trzeba skonfigurować to dla każdej klasy

np

@Entity 
public class Person { 

    @Id @GeneratedValue 
    private Long id; 
    private String firstName, lastName; 

    @ManyToOne 
    private Address address; 
    … 
} 

PersonRepository:

interface PersonRepository extends CrudRepository<Person, Long> {} 

PersonRepository powraca,

{ 
    "firstName" : "Frodo", 
    "lastName" : "Baggins", 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/persons/1" 
    }, 
    "address" : { 
     "href" : "http://localhost:8080/persons/1/address" 
    } 
    } 
} 

Moja projekcji:

@Projection(name = "inlineAddress", types = { Person.class }) 
interface InlineAddress { 

    String getFirstName(); 

    String getLastName(); 

    Address getAddress(); 
} 

Po dodaniu projekcję, zwraca ..

{ 
    "firstName" : "Frodo", 
    "lastName" : "Baggins", 
    "address" : { 
    "street": "Bag End", 
    "state": "The Shire", 
    "country": "Middle Earth" 
    }, 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/persons/1" 
    }, 
    "address" : { 
     "href" : "http://localhost:8080/persons/1/address" 
    } 
    } 
} 

Jeśli jakieś inne zajęcia mające związek jak adres, wtedy trzeba dodać projekcji dla tych klas również .

Ale nie chcę konfigurować dla każdej klasy. Jak wdrożyć dynamiczną projekcję? Tak, aby wszystkie moje jednostki zwróciły w odpowiedzi obiekt zagnieżdżony.

Patrz: https://jira.spring.io/browse/DATAREST-221

Odpowiedz

1

chodzi o pierwsze pytanie, które zostało już odpowiedział here, exposeIdsFor akceptuje dowolną liczbę argumentów. Również, jak wspomniano, in this thread Jeśli wszystkie twoje klasy jednostek znajdują się w tym samym pakiecie, możesz uzyskać listę swoich klas za pomocą Reflections library i przekazać ją do exposeIdsFor().

+0

Ok. Już próbowałem z tym .. działa dobrze ...Czy jest to jedyny sposób na zwrócenie identyfikatora w odpowiedzi dla wszystkich podmiotów? – SST

+0

I chcę odpowiedzi również dla [2]. Uprzejmie podaj swoje przemyślenia .. – SST

-1

Nie powinieneś zwracać swoich modeli domen jako odpowiedzi. Dodaj jeszcze jedną warstwę DTO (obiektów transferu danych) i przekonwertuj model domeny na dto przy użyciu transakcji.

+0

To jest pytanie związane z używaniem biblioteki Spring Data Rest, która udostępnia repozytoria JPA jako zasoby rest, więc podejście DTO nie ma tutaj znaczenia. –

Powiązane problemy