定製 JSON 輸出
在應用程式中,有時需要從特定實體提供指向其他資源的連結。例如,一個 Customer
響應可以包含指向當前購物車或管理該實體相關資源的連結。Spring Data REST 集成了 Spring HATEOAS 並提供了一個擴充套件點,允許您修改傳送給客戶端的資源的表現形式。
RepresentationModelProcessor
介面
Spring HATEOAS 定義了一個用於處理實體的 RepresentationModelProcessor<>
介面。所有型別為 RepresentationModelProcessor<EntityModel<T>>
的 Bean 會被 Spring Data REST exporter 自動檢測到,並在序列化型別為 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://:8080/people", "added-link"));
return model;
}
};
}
前面的示例硬編碼了一個指向 localhost:8080/people 的連結。如果您的應用程式中有一個您希望連結到的 Spring MVC 端點,請考慮使用 Spring HATEOAS 的 linkTo(…) 方法來避免手動管理 URL。 |
定製表現形式
Spring Data REST exporter 在建立輸出表現形式之前會執行所有發現的 RepresentationModelProcessor
例項。它透過向內部 ConversionService
註冊一個 Converter<Entity, EntityModel>
例項來實現這一點。這是負責建立指向引用實體連結的元件(例如物件 JSON 表現形式中 _links
屬性下的物件)。它接受一個 @Entity
,並遍歷其屬性,為由 Repository
管理的屬性建立連結,並複製任何嵌入式或簡單屬性。
但是,如果您的專案需要以不同的格式輸出,則可以完全用您自己的實現替換預設的 JSON 輸出表現形式。如果您在 ApplicationContext
中註冊自己的 ConversionService
並註冊自己的 Converter<Entity, EntityModel>
,則可以返回您選擇的 EntityModel
實現。