Spring HATEOAS 与 Traverson

Spring HATEOAS with Traverson

我正在使用 spring-hateoas:0.18.0.RELEASEspring-boot:1.2。 5.RELEASE

为了调用我的 Web 服务并通过 HAL 链接,我正在使用 Traverson Client (API 受 Traverson JavaScript 库启发的客户端服务遍历)

Spring Hateoas Traverson Documentation

它是用于 HypermediaHateoasRest

的新功能

我的问题是什么时候需要使用PagedResourcesResource?

我在这里找到的示例 Traverson Client examples :

 final PagedResources<Resource<Customer>> resources = traverson
            .follow("customers","search","findByFirstName")
            .withTemplateParameters(parameters)
            .toObject(new TypeReferences.PagedResourcesType<Resource<Customer>>(){});

我写的代码是:

ParameterizedTypeReference<Resource<ProjectJSON>> resourceParameterizedTypeReference = new
                ParameterizedTypeReference<Resource<ProjectJSON>>() {};

Resource<ProjectJSON> projectJSONResource = traverson
            .follow("projects")
            .follow("$._embedded.projects[0]._links.self.href")
            .toObject(resourceParameterizedTypeReference);

我知道这不是一回事,但是调用 Traverson.toObject() 时资源的最佳实践是什么方法?

很简单:退回大量商品时使用 PagedResources,退回单个商品时使用 Resource。因此,当返回许多 Customer 个对象时,您可能希望对它们进行分页,并且您会使用 PagedResources<Resource<Customer>>。对于单个客户,它将是 Resource<Customer>

Resource 只是包装域对象并向其添加链接。如果您现在不需要链接,并且您知道将来也不需要链接,那么您也可以不使用 Resource

PagedResources 添加了用于选择页码和页面大小的页面元数据。它还允许服务器发送有关页面总数和项目总数的信息。您可以请求分页资源向您发送页面大小为 5 的第 2 页,您将获得第 6、7、8、9 和 10 项。