首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在子资源中添加HATEOAS链接

如何在子资源中添加HATEOAS链接
EN

Stack Overflow用户
提问于 2014-09-01 09:09:03
回答 1查看 3.4K关注 0票数 1

我有一个名为AdminResource的父资源和一个名为AdminModuleResource的子资源。

父母的资源被正确地安装了HATEOAS链接:

代码语言:javascript
复制
{
  "firstname" : "Stephane",
  "lastname" : "Eybert",
  "email" : "mittiprovence@yahoo.se",
  "password" : "e41de4c55873f9c000f4cdaac6efd3aa",
  "passwordSalt" : "7bc7bf5f94fef7c7106afe5c3a40a2",
  "links" : [ {
    "rel" : "self",
    "href" : "http://localhost/admins/3683"
  }, {
    "rel" : "modules",
    "href" : "http://localhost/admins/3683/modules"
  } ],
  "id" : 3683
}

儿童的资源也正确地安装了HATEOAS链接:

代码语言:javascript
复制
{
  "module" : "BTS",
  "adminResource" : {
    "firstname" : "Stephane",
    "lastname" : "Eybert",
    "email" : "mittiprovence@yahoo.se",
    "password" : "e41de4c55873f9c000f4cdaac6efd3aa",
    "passwordSalt" : "7bc7bf5f94fef7c7106afe5c3a40a2",
    "links" : [ ],
    "id" : 3683
  },
  "links" : [ {
    "rel" : "self",
    "href" : "http://localhost/modules"
  } ],
  "id" : 1087
}

但是它的父资源已经失去了它的链接。

现在,在我的子管理模块资源中,父管理资源没有它的链接。实际上,汇编程序的toResource方法只提供子管理模块资源的链接。

代码语言:javascript
复制
public AdminModuleResource toResource(AdminModule adminModule) {
    AdminModuleResource adminModuleResource = new AdminModuleResource();
    adminModuleResource.fromAdminModule(adminModule);
    adminModuleResource.add(linkTo(AdminModuleController.class).slash(adminModuleResource.getId()).withSelfRel());
    return adminModuleResource;
}

public AdminResource toResource(Admin admin) {
    AdminResource adminResource = createResourceWithId(admin.getId(), admin);
    adminResource.fromAdmin(admin);
    adminResource.add(linkTo(AdminController.class).slash(admin.getId()).slash(UriMappingConstants.MODULES).withRel(UriMappingConstants.MODULES));
    return adminResource;
}

知道如何将链接添加到父管理资源,即使在子管理模块资源中也是如此?

编辑:下面是我如何构建资源:

代码语言:javascript
复制
public void fromAdminModule(AdminModule adminModule) {
    this.setResourceId(adminModule.getId());
    this.setModule(adminModule.getModule());
    AdminResource adminResource = new AdminResource();
    adminResource.fromAdmin(adminModule.getAdmin());
    this.adminResource = adminResource;
}

public void fromAdmin(Admin admin) {
    this.setResourceId(admin.getId());
    this.setFirstname(admin.getFirstname());
    this.setLastname(admin.getLastname());
    this.setEmail(admin.getEmail().toString());
    this.setPassword(admin.getPassword());
}

谢谢!

斯蒂芬尼

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-18 20:15:44

只是偶然发现了这个问题,尽管它已经很老了,但对于其他实现类似功能的人来说,这可能是值得回答的。基本上,您可以在您的AdminModuleResource AdminResourceAssembler. AdminResource上为AdminResource创建嵌入式资源,并在您的AdminResourceAssembler.中构建这些嵌入式资源的链接。下面的代码是发布在此answer上的代码的简化版本

AdminResource上添加:

代码语言:javascript
复制
@JsonUnwrapped
private Resources<EmbeddedWrapper> embeddeds;
// + setters/getters

AdminResourceAssembler上添加:

代码语言:javascript
复制
EmbeddedWrappers wrapper = new EmbeddedWrappers(true);

List<EmbeddedWrapper> wrappers = (List<EmbeddedWrapper>) super.buildEmbeddables(entity);
Set<AdminModuleResource> moduleResources = adminResource.getModuleResources( );
if(!moduleResources.isEmpty( ))
    wrappers.add(wrapper.wrap(adminModuleResourceAssembler.toResources(moduleResources)));

adminResource.setEmbeddeds(new Resources<>(wrappers));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25602402

复制
相关文章

相似问题

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