对于最新的稳定版本,请使用 Spring Data REST 4.4.0spring-doc.cn

自定义 JSON 输出

有时,在您的应用程序中,您需要提供指向特定实体中其他资源的链接。例如,响应可能会包含指向当前购物车的链接或用于管理与该实体相关的资源的链接。Spring Data REST 提供与 Spring HATEOAS 的集成,并提供一个扩展钩子,允许您更改发送到客户端的资源的表示形式。Customerspring-doc.cn

界面RepresentationModelProcessor

Spring HATEOAS 定义了一个用于处理实体的接口。Spring Data REST exporter 会自动选取所有类型的 bean,并在序列化 type of of entity 时触发。RepresentationModelProcessor<>RepresentationModelProcessor<EntityModel<T>>Tspring-doc.cn

例如,要为实体定义处理器,请将类似于以下内容(取自 Spring Data REST 测试)添加到您的:Person@BeanApplicationContextspring-doc.cn

@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;
     }
   };
}
前面的示例对指向 .如果你的应用程序内有一个 Spring MVC 端点,你希望链接到它,请考虑使用 Spring HATEOAS 的 linkTo(...) 方法来避免管理 URL。localhost:8080/people

您可以通过调用 来添加指向实体的默认表示形式的链接,如前面的示例所示。您添加到 的任何链接都将添加到最终输出中。model.add(Link)EntityModelspring-doc.cn

自定义表示

Spring Data REST 导出器在创建输出表示之前运行任何发现的实例。它通过向内部 .这是负责创建指向引用实体的链接(例如对象的 JSON 表示形式中属性下的那些对象)的组件。它采用 an 并迭代其属性,为由 a 管理的属性创建链接,并在任何嵌入或简单属性之间进行复制。RepresentationModelProcessorConverter<Entity, EntityModel>ConversionService_links@EntityRepositoryspring-doc.cn

但是,如果您的项目需要以其他格式输出,则可以将默认的传出 JSON 表示形式完全替换为您自己的表示形式。如果您在 和 register your own 中注册自己的 ,则可以返回您选择的实现。ConversionServiceApplicationContextConverter<Entity, EntityModel>EntityModelspring-doc.cn