对于最新的稳定版本,请使用 Spring Data REST 4.5.3! |
自定义 JSON 输出
有时,在应用程序中,您需要提供指向特定实体的其他资源的链接。例如,一个Customer
响应可能会通过指向当前购物车的链接或用于管理与该实体相关的资源的链接进行扩充。Spring Data REST 提供与 Spring HATEOAS 的集成,并提供了一个扩展钩子,允许您更改发送到客户端的资源的表示形式。
这RepresentationModelProcessor
接口
Spring HATEOAS 定义了一个RepresentationModelProcessor<>
用于处理实体的接口。所有类型的 beanRepresentationModelProcessor<EntityModel<T>>
由 Spring Data REST 导出器自动获取,并在序列化类型为T
.
例如,要为Person
实体,添加一个@Bean
类似于以下内容(取自 Spring Data REST 测试)到您的ApplicationContext
:
@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;
}
};
}
前面的示例对链接进行硬编码localhost:8080/people . 如果您的应用程序中有一个 Spring MVC 端点,您希望链接到该端点,请考虑使用 Spring HATEOAS 的linkTo(…) 方法来避免管理 URL。 |
自定义表示
Spring Data REST 导出器运行任何发现的RepresentationModelProcessor
实例,然后再创建输出表示。它通过注册一个Converter<Entity, EntityModel>
实例与内部ConversionService
. 这是负责创建指向引用实体的链接的组件(例如_links
属性)。它采用@Entity
并迭代其属性,为由Repository
以及跨任何嵌入或简单属性进行复制。
但是,如果您的项目需要以不同的格式输出,您可以将默认的传出 JSON 表示形式完全替换为您自己的表示形式。如果您注册自己的ConversionService
在ApplicationContext
并注册您自己的Converter<Entity, EntityModel>
,您可以返回一个EntityModel
您选择的实施。