自訂 JSON 輸出
有時在您的應用程式中,您需要從特定實體提供其他資源的連結。例如,Customer
回應可能會豐富包含目前購物車的連結,或管理與該實體相關資源的連結。Spring Data REST 提供與 Spring HATEOAS 的整合,並提供擴充掛鉤,讓您可以變更傳送給用戶端的資源表示法。
RepresentationModelProcessor
介面
Spring HATEOAS 定義了 RepresentationModelProcessor<>
介面來處理實體。所有類型為 RepresentationModelProcessor<EntityModel<T>>
的 bean 都會被 Spring Data REST 匯出器自動選取,並在序列化類型為 T
的實體時觸發。
例如,若要為 Person
實體定義處理器,請將類似以下 (取自 Spring Data REST 測試) 的 @Bean
新增至您的 ApplicationContext
@Bean
public RepresentationModelProcessor<EntityModel<Person>> personProcessor() {
return new RepresentationModelProcessor<EntityModel<Person>>() {
@Override
public EntityModel<Person> process(EntityModel<Person> model) {
model.add(new Link("https://127.0.0.1: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
實作。