春天HATEOAS与Traverson

时间:2015-11-24 17:27:42

标签: hateoas spring-hateoas hal hypermedia

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

要使用 Traverson客户端 (客户端的API)调用我的Web服务并浏览 HAL 链接受Traverson JavaScript库启发的服务遍历)

Spring Hateoas Traverson Documentation

使用超媒体 HateoasRest

的新功能

我的问题是我何时需要使用 PagedResources 资源

我在这里找到的示例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() 方法时,资源的最佳做法是什么?

1 个答案:

答案 0 :(得分:3)

这很简单:当您返回大量项目时使用PagedResources,而当您返回单个项目时使用Resource。因此,当返回许多Customer个对象时,您可能想要对它们进行分页,并且您将使用PagedResources<Resource<Customer>>。对于单个客户,它是Resource<Customer>

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

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