2015-08-06 6 views
1

Я стараюсь потреблять отдохнув веб-служб с Spring Traverson и основной restTemplate, но это не работает ...Как потреблять ресурс с _embedded ресурсов

Я потребляют остальное веб-сервис, который ВОЗВРАТ:

 
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 с ресурсами, ресурсами или классами ResourceSupport, чтобы соответствовать т hese java objects?

ответ

0

Ваша структура выглядит не совсем правильно. Например, _embedded отображается на Spring HATEOAS Ресурсы, который предназначен для обработки списка ресурсов. Но ваша запись показывает _embedded, не содержащий список, а просто вложенную структуру.

У вас также есть атрибуты верхнего уровня в вашей структуре, которые не отображаются на тип ресурсов.

Если бы я был моделировать Автор и книгу (немного упрощенной) и экспортировать его с 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 spec, любой _embedded элемент карты на массивы.

Смежные вопросы