我正在构建一个 REST API。我有一个由无法扩展 ResourceSupport 的 bean 组成的域模型。使用 Spring-HATEOAS 将它们作为资源公开的最佳方法是什么?
如果这是不可能的,那么在 bean 生成的 JSON 上包含链接的最佳方式是什么?
我正在构建一个 REST API。我有一个由无法扩展 ResourceSupport 的 bean 组成的域模型。使用 Spring-HATEOAS 将它们作为资源公开的最佳方法是什么?
如果这是不可能的,那么在 bean 生成的 JSON 上包含链接的最佳方式是什么?
您可以使用Resource
包装器:
MyModel model = ...
Resource<MyModel> resource = new Resource(model);
resource.add(linkTo(...
您应该将资源与您的域分开。
即使它们看起来很相似,域模型和资源也有很大的不同。
域对象是您的内部表示。根据您的业务逻辑/持久性的实现方式和其他设计决策,实现会受到限制。例如,它们可能是 JPA 实体,也可能是不可变的。
资源是对外部世界的表示。可能与域是一对一的或完全不同的。单个域实体具有多个资源表示的情况并不少见。
但首先,资源实现意味着在线发送/接收。所以它有被编组/解组的限制。
因此,您的应用程序应该具有用于域和资源的单独对象。使用 Spring HATEOAS,映射是使用资源组装器完成的。
您可以查看此示例应用程序:https ://github.com/opencredo/spring-hateoas-sample和相关文章:使用 Spring HATEOAS 实现 HAL 超媒体 REST API