此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data REST 4.4.0spring-doc.cadn.net.cn

自定义 JSON 输出

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

RepresentationModelProcessor接口

Spring HATEOAS 定义了一个RepresentationModelProcessor<>用于处理实体的接口。类型RepresentationModelProcessor<EntityModel<T>>由 Spring Data REST 导出器自动选取,并在序列化T.spring-doc.cadn.net.cn

例如,要为Person实体中,添加@Bean类似于以下内容(取自 Spring Data REST 测试)到ApplicationContext:spring-doc.cadn.net.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;
     }
   };
}
前面的示例对指向localhost:8080/people.如果您的应用程序中有一个 Spring MVC 端点,并且您希望链接到该端点,请考虑使用 Spring HATEOAS 的linkTo(…​)方法来避免管理 URL。

您可以通过调用model.add(Link),如前面的示例所示。您添加到EntityModel将添加到最终输出中。spring-doc.cadn.net.cn

自定义表示

Spring Data REST 导出器运行任何已发现的RepresentationModelProcessor实例。它通过注册Converter<Entity, EntityModel>实例具有内部ConversionService.这是负责创建指向引用实体(例如_links属性)。它需要一个@Entity并迭代其属性,为由Repository以及跨任何嵌入或简单属性进行复制。spring-doc.cadn.net.cn

但是,如果您的项目需要以其他格式输出,则可以将默认的传出 JSON 表示形式完全替换为您自己的表示形式。如果您自己注册ConversionServiceApplicationContext并注册您自己的Converter<Entity, EntityModel>,您可以返回EntityModel实现您选择的。spring-doc.cadn.net.cn