Я использую Spring Data REST с CosmosDB, поэтому я использую аннотации типа @Document
вместо @Entity
. У меня есть документ верхнего уровня с именем Fighter
, каждый из которых имеет List<Attack>
, который содержит 200-300 Attack
объектов.
Когда я вызываю конечную точку /fighters
, он возвращает мне все Fighter
объекты, как и ожидалось. Но он дает мне весь граф объектов, т. Е. Все Attack
объекты встроены в Fighter
в ответе. Это означает, что размер ответа составляет несколько мегабайт.
Это заставило меня подумать, что должна быть какая-то аннотация, чтобы позволить мне возвращать "поверхностный" ответ - то есть только сами объекты Fighter
без детская коллекция. Однако, если он существует, я изо всех сил пытаюсь его найти.
Очевидно, что когда я запрашиваю точного Истребителя с /fighters/{id}
, я бы хотел вернуть весь объект обратно, включая все Attack
объекты.
Есть ли способ сделать это?
Это мой документ Fighter:
import com.microsoft.azure.spring.data.cosmosdb.core.mapping.Document;
import com.microsoft.azure.spring.data.cosmosdb.core.mapping.PartitionKey;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import java.util.List;
@Getter
@Setter
@Document(collection = "fighters")
public class Fighter {
@Id
private String id;
@PartitionKey
private String game;
private String name;
private List<AttackDoc> attacks;
}
Поле attacks
- это поле, которое я не хочу заполнять полностью заполняется, когда я делаю запрос /fighters
GET. Attack
- это просто POJO с целой загрузкой полей.
Мой репозиторий выглядит так, пока ничего:
package rc.framedata.libraofsouls;
import com.microsoft.azure.spring.data.cosmosdb.repository.CosmosRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import org.springframework.data.rest.core.annotation.RestResource;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@RepositoryRestResource(collectionResourceRel = "fighter", path = "fighter")
public interface FighterRepository extends CosmosRepository<FighterDoc, String> {
@RestResource(path = "name", rel = "name")
List<FighterDoc> findByName(@Param("name") String name);
}
Я знаю, что мог бы что-то сделать вручную, например, сделать Остановите конечную точку и удалите attacks
перед возвращением, но это кажется немного расточительным.
Спасибо большое!