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

界面RepresentationModelProcessor

Spring HATEOAS 定义了一个用于处理实体的接口。Spring Data REST 导出器会自动拾取所有类型的 bean,并在序列化 类型的实体时触发。RepresentationModelProcessor<>RepresentationModelProcessor<EntityModel<T>>TSpring中文文档

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

@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
前面的示例对指向 的链接进行硬编码。如果应用中有要链接到的 Spring MVC 端点,请考虑使用 Spring HATEOAS 的 linkTo(...) 方法来避免管理 URL。localhost:8080/people

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

自定义表示

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

但是,如果您的项目需要具有不同格式的输出,则可以将默认的传出 JSON 表示形式完全替换为您自己的表示形式。如果你在 中注册你自己的 并注册你自己的 ,你可以返回你选择的实现。ConversionServiceApplicationContextConverter<Entity, EntityModel>EntityModelSpring中文文档