![](/img/trans.png)
[英]Problems consuming json+hal _embedded resources with spring RestTemplate
[英]How to consume resource with _embedded resources
我正在嘗試使用Spring Traverson和基本restTemplate來使用Rest Web服務,但是它不起作用...
我使用了一個休息的Web服務,該服務返回:
GET /books/1 ContentType: application/hal+json { "title": "Les Misérables" , "ISBN": "9780685113974", "_embedded": { "author": { "firstName": "Victor" , "lastName": "Hugo" , "born": "18020226", "died": "18850522" }, "meta": { "type": "classic" , "country": "FR" } } }
我想在Java方面有如下資源類:
class Book {
String title;
String isbn;
Author author;
Meta meta;
}
class Author {
String firstName;
String lastName;
Date born;
Date died;
}
class Meta {
String type;
String country;
}
如何將RestTemplate或Traverson與Resource,Resources或ResourceSupport類一起使用以匹配這些Java對象?
您的結構看起來不太正確。 例如,_embedded被映射到Spring HATEOAS Resources上 ,該資源用於處理資源列表。 但是您的記錄顯示_embedded不包含列表,而只是一個嵌套結構。
您的結構中還具有頂級屬性,這些屬性不會映射到“資源”類型。
如果我要對Author and Book進行建模(略微簡化)並使用Spring Data REST(將作者內聯到書中)將其導出,則將如下所示:
$ curl localhost:8080/books/
{
"_embedded" : {
"books" : [ {
"title" : "Learning Spring Boot",
"author" : {
"firstName" : "Greg",
"lastName" : "Turnquist"
},
"_links" : {
"self" : {
"href" : "http://localhost:8080/books/1"
},
"book" : {
"href" : "http://localhost:8080/books/1"
}
}
} ]
},
"_links" : {
"self" : {
"href" : "http://localhost:8080/books/"
},
"profile" : {
"href" : "http://localhost:8080/profile/books"
}
}
}
如果我讀一本書,記錄將如下所示:
$ curl localhost:8080/books/1
{
"title" : "Learning Spring Boot",
"author" : {
"firstName" : "Greg",
"lastName" : "Turnquist"
},
"_links" : {
"self" : {
"href" : "http://localhost:8080/books/1"
},
"book" : {
"href" : "http://localhost:8080/books/1"
}
}
}
閱讀HAL規范 ,任何_embedded元素都映射到數組上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.