2015-10-15 3 views
1

У меня есть база данных и некоторые классы. Эти классы связаны с OneToMany и т. Д.Spring Boot REST Ресурс, не показывающий связанные объекты (комплекты)

Если я печатаю сам объект весной, он содержит все. Но если я печатаю его с помощью функции Resource, он содержит только переменные, которые не являются коллекциями или иным образом связаны с другим классом.

Как добавить коллекцию к выходу?

+0

Вы используете Spring Data REST? Посмотрите на прогнозы, если это так. –

+0

Я использую Spring REST. Что вы подразумеваете под «прогнозами»? – rala

ответ

1

По умолчанию Spring Data REST не показывает связанные ресурсы, кроме как ссылок. Если вы хотите, чтобы вы определяли прогнозы, которые описывают поля, которые вы хотите просмотреть, являются ли они простыми полями, такими как те, которые вы описываете, или связанные с ними ресурсы. См

http://docs.spring.io/spring-data/rest/docs/current/reference/html/#projections-excerpts

Например, у вас есть Service ресурс с ассоциациями к ресурсам, как serviceType, serviceGroup, owner, serviceInstances и docLinks. Если вы желаете, чтобы показать в теле ответа вы можете создать проекцию:

package my.app.entity.projection; 

import org.springframework.data.rest.core.config.Projection; 
... 

@Projection(name = "serviceDetails", types = Service.class) 
public interface ServiceDetails { 
    String getKey(); 
    String getName(); 
    ServiceType getType(); 
    ServiceGroup getGroup(); 
    Person getOwner(); 
    List<ServiceInstance> getServiceInstances();  
    List<DocLink> getDocLinks(); 
    String getPlatform(); 
} 

затем получить ваш URL с проекцией:

http://localhost:8080/api/services/15?projection=serviceDetails 

Результат будет включать в себя прогнозируемые свойства:

{ 
    "name" : "MegaphoneService", 
    "key" : "megaphone", 
    "type" : { 
    "key" : "application", 
    "name" : "User Application", 
    "description" : "A service that allows users to use a megaphone." 
    }, 
    "owner" : null, 
    "serviceInstances" : [ { 
    "key" : "megaphone-a-dr", 
    "description" : null, 
    "loadBalanced" : true, 
    "minCapacityDeploy" : null, 
    "minCapacityOps" : 50 
    }, ... ], 
    ... 
} 
+0

Это действительно единственное решение? Я имею в виду, что у меня есть классы для всех записей в базе данных, и теперь я должен также создавать интерфейсы? – rala

+1

Только в тех случаях, когда вам действительно нужны данные. Это отличается от, например, JPA/Hibernate, где у вас может быть ленивая загрузка, потому что с ответом HTTP у вас не будет прокси-сервера для ленивой загрузки. Если SDR должен был по умолчанию показывать все связанные ресурсы, которые приведут к большим ответам (с соответствующими объединениями/полезными нагрузками) во многих контекстах, где ссылок достаточно. Таким образом SDR возвращает все, что может, без присоединения, но предлагает возможность присоединиться по мере необходимости. –

+0

Я использую 'Pageableable' в других случаях, и там он показывает мне контент по умолчанию. Любой способ сделать это с этим? – rala

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