自定義 JSON 輸出
有時在您的應用程式中,您需要從特定實體提供指向其他資源的連結。例如,Customer 響應可能透過指向當前購物車或用於管理與該實體相關的資源的連結進行豐富。Spring Data REST 提供與 Spring HATEOAS 的整合,並提供一個擴充套件鉤子,允許您更改傳送給客戶端的資源表示。
RepresentationModelProcessor 介面
Spring HATEOAS 定義了一個用於處理實體的 RepresentationModelProcessor<> 介面。所有型別為 RepresentationModelProcessor<EntityModel<T>> 的 bean 都會被 Spring Data REST 匯出器自動拾取,並在序列化型別為 T 的實體時觸發。
例如,要為 Person 實體定義處理器,請在您的 ApplicationContext 中新增一個類似於以下示例(取自 Spring Data REST 測試)的 @Bean:
@Bean
public RepresentationModelProcessor<EntityModel<Person>> personProcessor() {
return new RepresentationModelProcessor<EntityModel<Person>>() {
@Override
public EntityModel<Person> process(EntityModel<Person> model) {
model.add(new Link("https://:8080/people", "added-link"));
return model;
}
};
}
前面的示例硬編碼了指向 localhost:8080/people 的連結。如果您的應用程式中有一個 Spring MVC 端點希望連結到,請考慮使用 Spring HATEOAS 的 linkTo(…) 方法,以避免管理 URL。 |
自定義表示
Spring Data REST 匯出器在建立輸出表示之前執行所有發現的 RepresentationModelProcessor 例項。它透過向內部 ConversionService 註冊一個 Converter<Entity, EntityModel> 例項來完成此操作。這是負責建立引用實體連結的元件(例如物件 JSON 表示中 _links 屬性下的那些物件)。它接受一個 @Entity 並遍歷其屬性,為由 Repository 管理的屬性建立連結,並複製任何嵌入或簡單屬性。
但是,如果您的專案需要以不同格式輸出,您可以完全用您自己的格式替換預設的傳出 JSON 表示。如果您在 ApplicationContext 中註冊您自己的 ConversionService 並註冊您自己的 Converter<Entity, EntityModel>,您可以返回您選擇的 EntityModel 實現。