Customizing the JSON Output
有时在您的应用程序中,您需要从特定实体提供到其他资源的链接。例如,`Customer`响应可以用链接到当前购物车,或到管理与该实体相关的资源的链接来丰富。Spring Data REST 提供与 Spring HATEOAS的集成,并提供一个扩展挂钩,供您更改传递到客户端的资源的表示形式。
The RepresentationModelProcessor
Interface
Spring HATEOAS 定义了一个用于处理实体的 RepresentationModelProcessor<>
接口。Spring Data REST 导出程序将自动选取类型为 RepresentationModelProcessor<EntityModel<T>>
的所有 bean,并在对类型为 T
的实体进行序列化时触发这些 bean。
例如,为了为 Person
实体定义一个处理器,可以向 ApplicationContext
中添加一个类似于下面的 @Bean
(取自 Spring Data REST 测试):
@Bean
public RepresentationModelProcessor<EntityModel<Person>> personProcessor() {
return new RepresentationModelProcessor<EntityModel<Person>>() {
@Override
public EntityModel<Person> process(EntityModel<Person> model) {
model.add(new Link("http://localhost:8080/people", "added-link"));
return model;
}
};
}
前面示例将硬编码链接到 http://localhost:8080/people
。如果在应用内有一个希望链接的 Spring MVC 终端, 请考虑使用 Spring HATEOAS 的 linkTo(…)
方法, 以免管理 URL 。
Customizing the Representation
在创建输出表示之前,Spring Data REST 导出器会运行任何已发现的 RepresentationModelProcessor
实例。它通过在内部 ConversionService
中注册一个 Converter<Entity, EntityModel>
实例来实现这一点。此组件负责创建到引用实体的链接(例如对象 JSON 表示中的 _links
属性下的那些对象)。它获取一个 @Entity
并迭代它的属性,为那些由 Repository
管理的属性创建链接并复制任何嵌入式或简单属性。
但是,如果你的项目需要以不同的格式输出,你可以完全用你自己的默认出站 JSON 表示替换它。如果你在 ApplicationContext
中注册自己的 ConversionService
和自己的 Converter<Entity, EntityModel>
,你可以返回你选择的 EntityModel
实现。