首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Spring数据REST中添加到根资源的链接?

如何在Spring数据REST中添加到根资源的链接?
EN

Stack Overflow用户
提问于 2014-04-17 14:21:24
回答 3查看 7.7K关注 0票数 15

如何在Spring的资源根列表中公开外部资源(不是通过存储库进行管理)?我按照雷斯特巴克斯中的模式定义了一个控制器

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-16 21:28:27

这可以通过实现ResourceProcessor<RepositoryLinksResource>来实现。

下面的代码片段将"/others“添加到根列表中

代码语言:javascript
运行
复制
@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;
    }
}

应加

代码语言:javascript
运行
复制
{
    "rel": "others",
    "href": "http://localhost:8080/api/others"
}

到根目录链接

票数 23
EN

Stack Overflow用户

发布于 2018-03-05 01:28:32

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

代码语言:javascript
运行
复制
@RestController
@RequestMapping("/")
public class RootController {}

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

代码语言:javascript
运行
复制
@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;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2022-05-01 21:17:10

2022年,API发生了变化。这个答复可能是相关的:将ResourceProcessor迁移到HATEOAS 1.0.0 M1

下面是我使用新API编写的代码:

代码语言:javascript
运行
复制
@Component
class AuthLinkProcessor implements RepresentationModelProcessor<RepositoryLinksResource> {
    @Override
    public RepositoryLinksResource process(RepositoryLinksResource model) {
        model.add(
                linkTo(AuthenticationController.class)
                        .slash("/authenticate")
                        .withRel("authenticate"));
        return model;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23135756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档