春天 HATEOAS 与 Traverson

Iva*_*cki 4 hal hateoas hypermedia spring-hateoas

我正在使用spring-hateoas:0.18.0.RELEASEspring-boot:1.2.5.RELEASE

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

Spring Hateoas Traverson 文档

使用HypermediaHateoasRest的新功能

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

我在这里找到的示例 Traverson 客户端示例

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

我写的代码是:

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

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

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

Zer*_*One 5

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

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

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