Ich verwende Spring Data REST 2.5.1, Jackson 2.8.0, Spring Boot 1.3.6.Spring Data REST - Liste der Entitäten konsumieren, Java HATEOAS-Client
Ich versuche, eine einfache Liste von Entitäten aus meinem Repository über RestTemplate zu erhalten. Ich kann den Endpunkt in einem Browser treffen und die erwarteten HAL-Daten erhalten. Das Abrufen einer einzelnen Entität funktioniert wie folgt. Diese verwenden alle die Standard-SDR-Endpunkte (z. B. localhost: {port}/myEntity).
ResponseEntity<Resource<MyEntity>> responseEntity =
new RestTemplate()
.exchange(
uri + "/1",
HttpMethod.GET,
HttpEntity.EMPTY,
new ParameterizedTypeReference<Resource<MyEntity>>() {}, port
)
Oder neue RestTemplate(). GetForEntity (uri + "/ 1", MyEntity.class, port)
Wie viel SO scheinen Fragen, um anzuzeigen, Beispiele für das Abrufen einer Liste zu finden ist ein Problem. Ich habe versucht, die ParameterizedTypeReference
mit Resources
, Resource
, MyEntity
, ein Array, Liste. Alles ohne Glück.
ResponseEntity<Resources<Resource<MyEntity>>> responseEntity =
new RestTemplate()
.exchange(
uri,
HttpMethod.GET,
HttpEntity.EMPTY,
new ParameterizedTypeReference<Resources<Resource<MyEntity>>>() {}
, port
)
Wenn wie oben mit so ziemlich jeder Sorte namens von Resources
, Resource
, List<MyEntity>
, MyEntity
usw., die ResponseEntity
leer. Wie:
<200 OK,Resources { content: [], links: [] },{Server=[Apache-Coyote/1.1], Content-Type=[application/json;charset=UTF-8], Transfer-Encoding=[chunked], Date=[...]}>
Die Zeichenfolge JSON sieht wie unten im Browser aus.
{
"_embedded" : {
"myEntities" : [ ... ]
},
"_links" : {
"self" : {
"href" : "http://localhost:8080/myEntity"
},
"profile" : {
"href" : "http://localhost:8080/profile/myEntity"
},
"search" : {
"href" : "http://localhost:8080/myEntity/search"
}
},
"page" : {
"size" : 20,
"totalElements" : 10,
"totalPages" : 1,
"number" : 1
}
}
Repository Definition:
@RepositoryRestResource(collectionResourceRel = "myEntities", path = "myEntity")
public interface MyEntityRepository extends PagingAndSortingRepository<MyEntity, Long>
, QueryDslPredicateExecutor<MyEntity>
, QuerydslBinderCustomizer<QMyEntity> { }
Irgendwelche Gedanken auf, was mir fehlt?
Wenn Sie sich die Struktur von 'Resources' ansehen, werden Sie feststellen, dass sie sich von der Struktur des JSON-Dokuments unterscheidet. Es ist, als ob du mit deinem Autoschlüssel dein Haus öffnen möchtest. – zeroflagL
Ja, ich verstehe, dass die Art, wie ich versuche, nicht funktioniert. Ich versuche herauszufinden, was funktioniert, nicht was nicht. Wenn SDR dieses Format erstellt, muss eine Spring-Klasse vorhanden sein, die es zu konsumieren erwartet. Ich sollte nicht für das Standardformat selbst rollen müssen. – JudgingNotJudging
Die Basis für das Dokument in Ihrem Beispiel ist 'PagedResources'. '_embedded' beruht auf 'EmbeddedWrapper'. Aber es gibt keine Klasse, die das Dokument direkt darstellt. Das Dokument wird dynamisch erstellt, da die _embedded-Eigenschaft dynamisch ist. – zeroflagL