如何在Spring Data REST中添加指向root资源的链接?

时间:2014-04-17 14:21:25

标签: spring-data-rest

如何在Spring Data REST的 root资源列表中公开外部资源(不通过存储库管理)?我按照Restbucks

中的模式定义了一个控制器

2 个答案:

答案 0 :(得分:19)

这可以通过实施ResourceProcessor<RepositoryLinksResource>来完成。

以下代码段将“/ others”添加到根列表

@Controller
@ExposesResourceFor(Other.class)
@RequestMapping("/others")
public class CustomRootController implements
        ResourceProcessor<RepositoryLinksResource> {

    @ResponseBody
    @RequestMapping(method = RequestMethod.GET)
    public ResponseEntity<Resources<Resource<Other>>> listEntities(
            Pageable pageable) throws ResourceNotFoundException {
            //... do what needs to be done
    }

    @Override
    public RepositoryLinksResource process(RepositoryLinksResource resource) {
        resource.add(ControllerLinkBuilder.linkTo(CustomRootController.class).withRel("others"));

        return resource;
    }
}

应该添加

{
    "rel": "others",
    "href": "http://localhost:8080/api/others"
}

到您的根列表链接

答案 1 :(得分:1)

我一直在寻找同一问题的答案,但关键是:我没有控制器。我的网址指向在auth过滤器中创建的内容。对我有用的是创建一个没有任何方法的RootController,并使用它来构建ResourceProcessor实现中的链接。

@RestController
@RequestMapping("/")
public class RootController {}

然后使用空控制器插入链接。

@Component
public class AuthLinkProcessor implements ResourceProcessor<RepositoryLinksResource> {

    @Override
    public RepositoryLinksResource process(RepositoryLinksResource resource) {
        resource.add(
                linkTo(RootController.class)
                .slash("auth/login")
                .withRel("auth-login"));
        return resource;
    }
}