> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v5/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potoyang.gitbook.io/spring-in-action-v5/di-6-zhang-chuang-jian-rest-fu-wu/6.3-qi-yong-yi-shu-ju-wei-zhong-xin-de-fu-wu/6.3.4-xiang-spring-data-duan-dian-tian-jia-yong-hu-chao-lian-jie.md).

# 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 端点添加用户链接

```java
@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` 请求的响应。
