spring-data-rest: возможно ли динамически встраивать отношения ресурса в один ответ?

Можно ли в весенний период отдыха данных встраивать данные для отношений первичного ресурса в ответ HAL?

Причина в том, что в некоторых случаях клиент знает, что ему понадобится Child ресурс и School а также Pets отношения сразу.

С помощью ссылок эту информацию можно запросить в n запросах, но в идеале это можно было бы сделать в 1.

Примечание: глубина n-уровней была бы хорошей (JSON-API поддерживает это), но на данный момент достаточно даже уровня 1.

Это очевидно возможно в соответствии со спецификацией HAL и даже возможно при использовании простых пружинных хатео (см. Этот пример).

  • Возможно ли это каким-либо образом с пружинным отдыхом?
  • Это возможно без большого количества кода котельной пластины и по существу переписывания битов SDR?

Если так, как это делается? Примеры будут приветствоваться.

Обратите внимание, что ВСЕ рассматриваемые ресурсы должны быть ресурсами верхнего уровня, поэтому не стоит использовать @RestResource(exported = false) и вставив их в строку, как того требует Оливер.

1 ответ

Вы можете определить проекцию, которая будет встраивать данные ассоциации:

Увидеть:

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

8.3. Извлечение часто используемых данных Распространенная ситуация со службами REST возникает при создании объектов домена. Например, Person хранится в одной таблице, а соответствующий ему адрес хранится в другой. По умолчанию Spring Data REST обслуживает адрес человека в качестве URI, по которому должен перемещаться клиент. Но если для потребителей характерно всегда извлекать этот дополнительный фрагмент данных, проекция выдержки может пойти дальше и вставить этот дополнительный фрагмент данных, сэкономив вам дополнительный GET

@Projection(name = "withAssociations", types = { MyEntity.class })
public interface WithAssocationsProjection{

   //method names match the getter methods in the corresponding Entity

   List<School> getSchools();

   List<Pet> getPets();

   //you can also in-line a subset of data or have a further level 
   //of data in-lined for the association by
   //specifying a further projection as the Collection Type.


   List<ChildProjection> getChildren();
}

Затем клиенты могут запросить конкретное представление данных, например:

http://localhost:9090/api/myEntities?projection=withAssociations

HTTP: // локальный: 9090 / API / myEntities / 123 проекции = withAssociations

Другие вопросы по тегам