6.3.4 向 Spring Data 端点添加用户超链接

如果最近的 tacos 端点不在 /api/tacos 返回的超链接中,客户端如何知道如何获取最近的 tacos?它要么猜测,要么使用分页和排序参数。无论哪种方式,它都将在客户端代码中硬编码,这并不理想。

不过,通过声明资源处理器 bean,可以将链接添加到 Spring Data REST 自动包含的链接列表中。Spring Data HATEOAS 提供了 ResourceProcessor,这是一个在通过 API 返回资源之前操作资源的接口。出于需要自动包含链接列表的目的,需要对 ResourceProcessor 进行实现,该实现将一个最近链接添加到类型为 PagedResources<Resource <Taco>> 的任何资源(为 /api/tacos 端点返回的类型)。下一个程序清单显示了定义这样一个 ResourceProcessor 的 bean 方法声明。程序清单 6.8 向 Spring Data REST 端点添加用户链接

@Bean
public ResourceProcessor<PagedResources<Resource<Taco>>>
    tacoProcessor(EntityLinks links) {
    
    return new ResourceProcessor<PagedResources<Resource<Taco>>>() {
        @Override
        public PagedResources<Resource<Taco>> process(
            PagedResources<Resource<Taco>> resource) {
            resource.add(
                links.linkFor(Taco.class)
                .slash("recent")
                .withRel("recents"));
            
            return resource;
        }
    };
}

程序清单 6.8 中显示的 ResourceProcessor 被定义为一个匿名内部类,并声明为一个将在 Spring 应用程序上下文中创建的 bean。Spring HATEOAS 将自动发现这个 bean(以及 ResourceProcessor 类型的任何其他 bean),并将它们应用于适当的资源。在这种情况下,如果从控制器返回 PagedResources<Resource<Taco>>,它将收到最近创建的 Taco 的链接。这包括对 /api/tacos 请求的响应。

最后更新于